了解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(); } };