了解Express Node.js中的vhost

我想了解如何vhost在Express JS实际工作。 这里是一个工作代码示例(忘了我从哪里拉):

 // -- inside index.js -- var EXPRESS = require('express'); var app = EXPRESS.createServer(); app.use(EXPRESS.vhost('dev.example.com', require('./dev').app)); app.listen(8080); // -- inside dev.js -- var EXPRESS = require('express'); var app = exports.app = EXPRESS.createServer(); app.get('/', function(req, res) { // Handle request... }); 

现在,我的问题是,为什么我们调用createServer()两次? 为什么这甚至工作? vhost是否在内部将两台服务器“合并”?

Node.js是事件驱动的,当一个请求进入时, request事件在一个http.Server上产生。 所以基本上, express.vhost (或者真的, connect.vhost )是一个在http.Server另一个实例上引发request事件的中间件函数:

 function vhost(req, res, next){ if (!req.headers.host) return next(); var host = req.headers.host.split(':')[0]; if (req.subdomains = regexp.exec(host)) { req.subdomains = req.subdomains[0].split('.').slice(0, -1); server.emit('request', req, res); } else { next(); } };