UNPKG

multihost

Version:

Hosting multiple Express apps on the same server.

52 lines (48 loc) 1.44 kB
'use strict'; /* 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); }; };