2012-03-03 36 views
5

Tôi đang cố gắng hiểu cách vhost thực sự hoạt động trong Express JS. Dưới đây là một mẫu mã làm việc (quên nơi tôi kéo từ này):Hiểu vhost trong 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... 
}); 

Bây giờ, câu hỏi của tôi là, tại sao chúng ta gọi createServer() hai lần? Tại sao điều này thậm chí làm việc? Là vhost nội bộ "hợp nhất" hai máy chủ với nhau?

Trả lời

10

Node.js là sự kiện điều khiển và khi có yêu cầu, sự kiện request được nêu trên số http.Server. Vì vậy, về cơ bản, express.vhost (hoặc thực sự, connect.vhost) là một hàm middleware điều này làm tăng sự kiện request trên một thể hiện của một 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(); 
    } 
    }; 
Các vấn đề liên quan