-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathapp.js
More file actions
135 lines (112 loc) · 3.32 KB
/
Copy pathapp.js
File metadata and controls
135 lines (112 loc) · 3.32 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// Setup
var express = require('express'),
MongoClient = require('mongodb').MongoClient,
assert = require('assert'),
Db = require('mongodb').Db,
Server = require('mongodb').Server,
Connection = require('mongodb').Connection,
http = require('http'),
debug = require('util').debug,
inspect = require('util').inspect
var app = express()
var bodyParser = require('body-parser')
app.use( bodyParser.json() )
app.use( bodyParser.urlencoded({ extended: true }) )
app.set('view engine', 'ejs')
app.use(express.static(__dirname + '/public'))
// MongoDB
var host = 'localhost';
var port = 27017;
var mongourl = process.env.MONGOHQ_URL || 'mongodb://'+host+':'+port+'/clickityclack';
var db;
MongoClient.connect(mongourl, function(err, database) {
if(err) throw err;
db = database;
});
// Homepage
app.get('/', function (req, res) {
res.render('index')
})
// Create a new event
app.post('/create', function(req,res){
if(isNaN(req.body.cap) || req.body.name == '')
return res.json( { 'error': -1} )
var newEvent = {'_id': randomString(), 'name': req.body.name, 'count': 0, 'cap': req.body.cap}
db.collection('events', function(err, collection) {
collection.insert(newEvent, {w:1}, function(err, result) {});
})
res.json(newEvent)
})
// Get an event
app.get('/:event/get', function(req,res){
db.collection('events', function(err, collection) {
collection.findOne({_id:req.params.event}, function(err, item) {
if(item === null)
res.json( { 'error': -1} )
else
res.json(item)
})
})
})
// Increment an event
app.post('/:event/increment', function(req,res){
db.collection('events', function(err, collection) {
collection.findOne({_id:req.params.event}, function(err, item) {
if(item === null) {
res.json( { 'error': -1} )
} else if(item.count < item.cap) {
collection.update({_id:req.params.event}, {$inc:{count:1}}, function(err, numberOfUpdatedObjects) {
collection.findOne({_id:req.params.event}, function(err, item) {
res.json(item)
})
})
} else {
res.json(item)
}
})
})
})
// Decrement an event
app.post('/:event/decrement', function(req,res){
db.collection('events', function(err, collection) {
collection.findOne({_id:req.params.event}, function(err, item) {
if(item === null) {
res.json( { 'error': -1} )
} else if(item.count > 0) {
collection.update({_id:req.params.event}, {$inc:{count:-1}}, function(err, numberOfUpdatedObjects) {
collection.findOne({_id:req.params.event}, function(err, item) {
res.json(item)
})
})
} else {
res.json(item)
}
})
})
})
// View an event
app.get('/:event', function(req,res){
db.collection('events', function(err, collection) {
collection.findOne({_id:req.params.event}, function(err, item) {
if(item === null)
res.json( { 'error': -1} )
else
res.render('event', {item: item})
})
})
})
// Express web server
var webport = process.env.PORT || 3000;
var server = app.listen(webport, function () {
var host = server.address().address
var port = server.address().port
console.log('ClickityClack listening at http://%s:%s', host, port)
})
// Additional functions
function randomString() {
var length = 7
var chars = '0123456789abcdefghijklmnopqrstuvwxyz'
var result = ''
for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))]
return result
}