multihost
Version:
Hosting multiple Express apps on the same server.
52 lines (48 loc) • 1.44 kB
JavaScript
;
/* eslint consistent-return: 0 */
module.exports = function multihost(options) {
var hosts = options.hosts;
var route = options.route;
var server = options.server;
if (route && typeof route !== 'string') {
throw new Error('multihost: route is not a string');
}
if (!server) {
throw new Error('multihost: server required');
}
// hosts
var reHosts = [];
if (hosts) {
var list = [].concat(hosts);
for (var i = 0; i < list.length; ++i) {
reHosts.push(new RegExp('^' + list[i].replace(/[*]/g, '(.*?)') + '$', 'i'));
}
}
return function (req, res, next) {
// hosts
if (reHosts.length > 0) {
if (!req.headers.host) {
return next();
}
var hostname = req.headers.host.split(':')[0]; // e.g. localhost:8000
var _i = 0;
for (_i = 0; _i < reHosts.length; ++_i) {
if (reHosts[_i].test(hostname)) {
break;
}
}
if (_i === reHosts.length) {
return next();
}
}
// route
if (route && req.url.indexOf(route) !== 0) {
return next();
}
// server
if (typeof server === 'function') {
return server(req, res, next);
}
server.emit('request', req, res);
};
};