我试图了解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
)是一个中间件函数,它在request
的另一个实例上引发http.Server
事件:
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();
}
};
关于javascript - 了解Express Node.js中的vhost,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9549812/