-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.coffee
89 lines (65 loc) · 2.21 KB
/
app.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
onHeroku = process.env.PORT
if onHeroku
dbString = "mongodb://heroku:[email protected]:10041/app2738679"
port = process.env.PORT
else
dbString = "localhost:27017/grocery-items"
port = 3000
express = require('express')
stylus = require('stylus')
mongo = require('mongoskin')
coffee = require('coffee-script')
db = mongo.db(dbString)
coll = db.collection('items')
routes = require('./routes')
app = module.exports = express.createServer()
io = require('socket.io').listen(app)
coffeeDir = __dirname + '/coffee'
publicDir = __dirname + '/public'
cssDir = publicDir + '/stylesheets'
# Configuration
app.configure ->
app.set('views', __dirname + '/views')
app.set('view engine', 'jade')
app.use(express.bodyParser())
app.use(express.methodOverride())
app.use(app.router)
app.use(express.compiler({src: coffeeDir, dest: publicDir, enable: ['coffeescript']}))
app.use(stylus.middleware({src: publicDir, compress: true}))
app.use express.static(publicDir)
if onHeroku
io.configure ->
io.set("transports", ["xhr-polling"])
io.set("polling duration", 10)
app.configure 'development', ->
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }))
app.configure 'production', ->
app.use(express.errorHandler())
# Routes
app.get '/', (req, res) ->
coll.find({purchased: false}).toArray (error, items) ->
data = JSON.stringify(items)
res.render('index', {items: data})
# Database
insertEntry = (data, callback) ->
coll.insert data, ->
callback()
editEntry = (data, callback) ->
coll.updateById data._id, {$set: {name: data.name}}, ->
callback()
deleteEntry = (data, callback) ->
coll.removeById data._id, ->
callback()
# Sockets
io.sockets.on 'connection', (socket) ->
socket.on 'new item posted', (data) ->
insertEntry data, ->
io.sockets.emit('new item saved', data)
socket.on 'item edited', (data) ->
editEntry data, ->
io.sockets.emit('item was edited', data)
socket.on 'item deleted', (data) ->
deleteEntry data, ->
io.sockets.emit('item was deleted', data)
app.listen(port)
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env)