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