forked from mauget/geospatial-mongodb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
executable file
·147 lines (114 loc) · 4.3 KB
/
server.js
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
136
137
138
139
140
141
142
143
144
145
146
#!/bin/env node
// OpenShift Geospatial Node application
var express = require('express');
var fs = require('fs');
var mongodb = require('mongodb');
/**
* Define a nodejs application ... a namespace function.
*/
var NodeApp = function() {
// Scope.
var self = this;
/**
* Set up server IP address and port # using env variables/defaults.
*/
self.setupVariables = function() {
// Pickup Mongo environment variables
self.dbServer = new mongodb.Server(process.env.OPENSHIFT_MONGODB_DB_HOST,
parseInt(process.env.OPENSHIFT_MONGODB_DB_PORT, 10));
self.db = new mongodb.Db(process.env.OPENSHIFT_APP_NAME, self.dbServer, {auto_reconnect: true, safe: false});
self.dbUser = process.env.OPENSHIFT_MONGODB_DB_USERNAME;
self.dbPass = process.env.OPENSHIFT_MONGODB_DB_PASSWORD;
// Inject db reference into routes module
require('routes').setDb(self.db);
// Web app environment variables
self.ipaddress = process.env.OPENSHIFT_INTERNAL_IP;
self.port = process.env.OPENSHIFT_INTERNAL_PORT || 8080;
if (typeof self.ipaddress === "undefined") {
// Log errors on OpenShift but continue w/ 127.0.0.1 - this
// enables running the app locally.
console.warn('No OPENSHIFT_INTERNAL_IP var, using 127.0.0.1');
self.ipaddress = "127.0.0.1";
}
}; /* setupVariables */
/**
* terminator === the termination handler
* Terminate server on receipt of the specified signal.
* @param {string} sig Signal to terminate on.
*/
self.terminator = function(sig){
if (typeof sig === "string") {
console.log('%s: Received %s - terminating sample app ...',
Date(Date.now()), sig);
process.exit(1);
}
console.log('%s: Node server stopped.', Date(Date.now()) );
}; /* terminator */
/**
* Set termination handlers (for exit and a list of signals).
*/
self.setupTerminationHandlers = function(){
// Process on exit and signals.
process.on('exit', function() { self.terminator(); });
['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT',
'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGTERM'
].forEach(function(element, index, array) {
process.on(element, function() { self.terminator(element); });
});
}; /* termination handlers */
/* ================================================================ */
/* App server functions (main app logic). */
/* ================================================================ */
/**
* Initialize the server (express): create the routes using
* module routes.js, and then register the handlers.
*/
self.initializeServer = function() {
var routes = require('routes').createRoutes(self);
self.app = express();
// Register handlers for the app (from the routes collection).
for (var r in routes) {
self.app.get(r, routes[r]);
}
}; /* initialize server */
/**
* Initialize application: housekeeping,
* cache static content, termination handler.
*/
self.initialize = function() {
self.setupVariables();
require('routes').populateCache(fs);
self.setupTerminationHandlers();
// Create the express server and routes.
self.initializeServer();
}; /* initialize app */
/**
* Start the server and the application.
*/
self.start = function() {
// Start the app on the specific interface (and port).
console.log('%s self.start entered', Date(Date.now()) );
self.app.listen(self.port, self.ipaddress, function() {
console.log('%s: Node server started on %s:%d ...',
Date(Date.now() ), self.ipaddress, self.port);
});
}; /* app start */
/**
* Connect db and then callback to start the application.
*/
self.connectDb = function( appStart ) {
self.db.open(function(err, db) {
if ( err ) { throw err; }
self.db.authenticate(self.dbUser, self.dbPass, function(err, result) {
if (err) { throw err; }
});
appStart();
});
}; /* Connect db */
}; /* Application. */
/* ================================================================ */
/* Main */
/* ================================================================ */
var theApp = new NodeApp();
theApp.initialize();
theApp.connectDb( theApp.start );