-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
executable file
·91 lines (78 loc) · 3.79 KB
/
server.js
File metadata and controls
executable file
·91 lines (78 loc) · 3.79 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
#!/usr/bin/node
// server.js
'use strict'
// set up ======================================================================
var express = require('express');
var app = express(); // create our app w/ express
var mongoose = require('mongoose'); // mongoose for mongodb
var morgan = require('morgan'); // log requests to the console (express4)
var bodyParser = require('body-parser'); // pull information from HTML POST (express4)
var methodOverride = require('method-override'); // simulate DELETE and PUT (express4)
var rateLimit = require('express-rate-limit'); // docs: https://www.npmjs.com/package/express-rate-limit
// configuration ===========================================================
var limiter = rateLimit({windowMs: 60000, //keep recordes of requests in memory for 60 seconds
delayAfter: 10, //begin delaying response after 10 requests
max: 15 //max number of requests in 1 min before 429
});
switch(process.env.NODE_ENV){
case 'test':
break;
case 'development':
app.use(morgan('dev')); // log every request to the console
break;
case 'production':
app.use(morgan('common')); // log every request to the console
break;
default:
app.use('/api/', limiter); //use limiter on urls starting with /api/
app.use(morgan('dev')); // log every request to the console
break;
}
app.use(bodyParser.urlencoded({'extended':'true'})); // parse application/x-www-form-urlencoded
app.use(bodyParser.json()); // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
app.use(bodyParser.raw());
app.use(methodOverride());
// database ================================================================
var database = require('./config/database');
mongoose.connect(database.url);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function (callback) {
console.log("connection to mongo database successful.");
});
// listen ==================================================================
var server;
switch(process.env.NODE_ENV){
case 'development':
server = app.listen(8080, function() {
console.log('Grd Me sever listening at port 8080');
});
break;
case 'production':
var fs = require('fs');
var https = require('https');
var httpsConfig = require('./config/productionPaths');
var privateKey = fs.readFileSync(httpsConfig.privateKeyPath);
var certificate = fs.readFileSync(httpsConfig.certificatePath);
var credentials = {key: privateKey, cert: certificate};
server = https.createServer(credentials, app);
server.listen(443, function () {
console.log('Grd Me sever listening at port 443');
});
break;
default:
server = app.listen(8080, function() {
console.log('Grd Me sever listening at port 8080');
});
break;
}
exports.close = function() {
server.close();
mongoose.disconnect();
};
exports.app = app;
// socket.io ===============================================================
var io = require('./push/socket').listen(server);
// load the routes
require('./app/routes')(app);