mirror of
https://gitlab.silvrtree.co.uk/martind2000/nci.git
synced 2025-01-11 06:05:08 +00:00
implement multi handler http server
This commit is contained in:
parent
337e681d4f
commit
0824f3bbad
67
app.js
67
app.js
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
var env = process.env.NODE_ENV || 'development',
|
var env = process.env.NODE_ENV || 'development',
|
||||||
db = require('./db'),
|
db = require('./db'),
|
||||||
http = require('http'),
|
httpServer = require('./lib/httpServer'),
|
||||||
nodeStatic = require('node-static'),
|
nodeStatic = require('node-static'),
|
||||||
path = require('path'),
|
path = require('path'),
|
||||||
fs = require('fs'),
|
fs = require('fs'),
|
||||||
@ -24,19 +24,66 @@ var staticPath = path.join(__dirname, 'static'),
|
|||||||
staticServer = new nodeStatic.Server(staticPath),
|
staticServer = new nodeStatic.Server(staticPath),
|
||||||
staticDataServer;
|
staticDataServer;
|
||||||
|
|
||||||
var server = http.createServer(function(req, res) {
|
var httpServerLogger = libLogger('http server');
|
||||||
|
|
||||||
|
app.httpServer = httpServer.create();
|
||||||
|
|
||||||
|
app.httpServer.on('error', function(err, req, res) {
|
||||||
|
httpServerLogger.error(
|
||||||
|
'Error processing request ' + req.method + ' ' + req.url + ':',
|
||||||
|
err.stack || err
|
||||||
|
);
|
||||||
|
if (!res.headersSent) {
|
||||||
|
res.statusCode = 500;
|
||||||
|
res.end();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.httpServer.addRequestListener(function(req, res, next) {
|
||||||
|
var start = Date.now();
|
||||||
|
|
||||||
|
res.on('finish', function() {
|
||||||
|
var end = Date.now();
|
||||||
|
|
||||||
|
httpServerLogger.log(
|
||||||
|
'[%s] %s %s %s - %s ms',
|
||||||
|
new Date(end).toUTCString(),
|
||||||
|
req.method,
|
||||||
|
req.url,
|
||||||
|
res.statusCode,
|
||||||
|
end - start
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
next();
|
||||||
|
});
|
||||||
|
|
||||||
|
app.httpServer.addRequestListener(function(req, res, next) {
|
||||||
if (req.url.indexOf('/api/') === 0) {
|
if (req.url.indexOf('/api/') === 0) {
|
||||||
return httpApi(req, res);
|
return httpApi(req, res, next);
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (new RegExp('^/projects/(\\w|-)+/workspace').test(req.url)) {
|
app.httpServer.addRequestListener(function(req, res, next) {
|
||||||
|
if (new RegExp('^/projects/(\\w|-)+/workspace/').test(req.url)) {
|
||||||
return staticDataServer.serve(req, res);
|
return staticDataServer.serve(req, res);
|
||||||
|
} else {
|
||||||
|
next();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (req.url.indexOf('/data.io.js') === -1) {
|
app.httpServer.addRequestListener(function(req, res, next) {
|
||||||
if (/(js|css|fonts|images)/.test(req.url)) {
|
if (new RegExp('^/(js|css|fonts|images)/').test(req.url)) {
|
||||||
staticServer.serve(req, res);
|
staticServer.serve(req, res);
|
||||||
} else {
|
} else {
|
||||||
|
next();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.httpServer.addRequestListener(function(req, res, next) {
|
||||||
|
if (req.url.indexOf('/data.io.js') === -1) {
|
||||||
// serve index for all app pages
|
// serve index for all app pages
|
||||||
if (env === 'development') {
|
if (env === 'development') {
|
||||||
var jade = require('jade');
|
var jade = require('jade');
|
||||||
@ -49,14 +96,14 @@ var server = http.createServer(function(req, res) {
|
|||||||
fs.createReadStream(path.join(staticPath, 'index.html'))
|
fs.createReadStream(path.join(staticPath, 'index.html'))
|
||||||
.pipe(res);
|
.pipe(res);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
next();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var socketio = require('socket.io')(server);
|
var socketio = require('socket.io')(app.httpServer);
|
||||||
var dataio = require('./dataio')(socketio);
|
var dataio = require('./dataio')(socketio);
|
||||||
|
|
||||||
app.server = server;
|
|
||||||
app.dataio = dataio;
|
app.dataio = dataio;
|
||||||
|
|
||||||
app.lib = {};
|
app.lib = {};
|
||||||
@ -248,7 +295,7 @@ Steppy(
|
|||||||
var host = app.config.http.host,
|
var host = app.config.http.host,
|
||||||
port = app.config.http.port;
|
port = app.config.http.port;
|
||||||
logger.log('Start http server on %s:%s', host, port);
|
logger.log('Start http server on %s:%s', host, port);
|
||||||
app.server.listen(port, host);
|
app.httpServer.listen(port, host);
|
||||||
},
|
},
|
||||||
function(err) {
|
function(err) {
|
||||||
if (err) throw err;
|
if (err) throw err;
|
||||||
|
@ -142,7 +142,7 @@ module.exports = function(app) {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
return function(req, res) {
|
return function(req, res, next) {
|
||||||
|
|
||||||
Steppy(
|
Steppy(
|
||||||
function() {
|
function() {
|
||||||
@ -175,11 +175,7 @@ module.exports = function(app) {
|
|||||||
res.end();
|
res.end();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
function(err) {
|
next
|
||||||
logger.error('Error occurred during request: ', err.stack || err);
|
|
||||||
res.statusCode = 500;
|
|
||||||
res.end();
|
|
||||||
}
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
40
lib/httpServer.js
Normal file
40
lib/httpServer.js
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var http = require('http'),
|
||||||
|
inherits = require('util').inherits;
|
||||||
|
|
||||||
|
function Server() {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.requestListeners = [];
|
||||||
|
|
||||||
|
return http.Server.call(self, function(req, res) {
|
||||||
|
self._processRequestListeners(req, res, 0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
inherits(Server, http.Server);
|
||||||
|
|
||||||
|
Server.prototype.addRequestListener = function(requestListener) {
|
||||||
|
this.requestListeners.push(requestListener);
|
||||||
|
};
|
||||||
|
|
||||||
|
Server.prototype._processRequestListeners = function(req, res, index) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.requestListeners[index](req, res, function(err) {
|
||||||
|
if (err) {
|
||||||
|
self.emit('error', err, req, res);
|
||||||
|
} else {
|
||||||
|
index++;
|
||||||
|
if (self.requestListeners[index]) {
|
||||||
|
self._processRequestListeners(req, res, index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.create = function() {
|
||||||
|
return new Server;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user