【问题标题】:Understanding vhost in Express Node.js了解 Express Node.js 中的虚拟主机
【发布时间】:2012-03-04 08:14:10
【问题描述】:

我试图了解 vhost 在 Express 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 是否在内部将两台服务器“合并”在一起?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 2016-07-27
      • 2013-08-23
      • 1970-01-01
      • 2014-02-01
      • 2014-03-16
      • 1970-01-01
      • 2013-04-21
      相关资源
      最近更新 更多