2012-03-03 16 views
5

Estoy tratando de entender cómo funciona realmente vhost en Express JS. Aquí está un ejemplo de código de trabajo (olvidó de dónde saqué esto desde):Comprensión de vhost en 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... 
}); 

Ahora, mi pregunta es, ¿por qué nombre se conocen createServer() dos veces? ¿Por qué esto incluso funciona? ¿vhost internamente "fusiona" los dos servidores?

Respuesta

10

Node.js es un evento controlado, y cuando llega una solicitud, se genera el evento request en un http.Server. Así que, básicamente, express.vhost (o en realidad, connect.vhost) es una función de middleware, que genera el evento request en otra instancia de 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(); 
    } 
    }; 
Cuestiones relacionadas