理解Express Node.js中的虚拟主机(vhost)

5

我想理解在Express JS中如何使用vhost。这是一个有效的代码示例(忘记从哪里复制的):

// -- 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内部是否会将这两个服务器合并在一起?
1个回答

10

Node.js是事件驱动的,当请求进来时,在http.Server上会触发request事件。因此基本上,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();
    }
  };

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接