2012-03-03 87 views
5

我想了解vhost实际上在Express JS中的工作原理。这里是一个工作的代码示例(忘了,我这拉从):了解Express中的vhost Node.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是否在内部“合并”两个服务器?

回答

10

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