2012-03-03 5 views
5

vhostが実際にExpress JSでどのように動作するかを理解しようとしています。Express 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は内部的に2台のサーバーを「マージ」していますか?

答えて

10

Node.jsはイベント駆動型で、要求が到着するとrequestイベントはhttp.Serverに発生します。だから、基本的には、express.vhost(または本当に、connect.vhosthttp.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(); 
    } 
    };