我试图了解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/

10-09 23:24