了解Express Node.js中的vhost

pix*_*eak 5 javascript node.js

我试图了解vhostExpress 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...
});
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,我们为什么要打createServer()两次电话?为什么这甚至有效?被vhost内部"合并"两个服务器一起?

Lin*_*iel 10

Node.js是事件驱动的,当请求进入时,request事件在a上引发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();
    }
  };
Run Code Online (Sandbox Code Playgroud)