2012-03-03 17 views
5

Sto cercando di capire come vhost funzioni effettivamente in Express JS. Ecco un esempio di codice di lavoro (dimenticato dove ho tirato questo da):Informazioni su vhost in 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... 
}); 

Ora, la mia domanda è: perché chiamiamo createServer() due volte? Perché funziona anche questo? vhost internamente "fondendo" i due server insieme?

risposta

10

Node.js è basato su eventi e quando una richiesta arriva, l'evento request viene generato su un http.Server. Quindi, fondamentalmente, express.vhost (o realmente, connect.vhost) è una funzione middleware che genera l'evento request in un'altra istanza di un 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(); 
    } 
    };