Express.js unuse / remove vhost?

时间:2014-08-29 07:06:22

标签: node.js express

上下文

我有一台带有单个IP的服务器,我使用express.vhost在同一端口上运行一些虚拟域。

app.listen (80);     
app.use (express.vhost ('www.example.com', 
                         require('./vhosts/example/app.js').app));    
app.use (express.vhost ('www.another.com', 
                         require('./vhosts/another/app.js').app));

app.js示例

var express = require('express');
var app = express();
app.get('*', function(req, res){
  res.send('Hello Virtual Domain');
});
module.exports.app = app;

问题

如何在不重新启动应用程序的情况下发布其中一个虚拟域?

某种

app.use (var example = express.vhost ('www.example.com', 
                             require('./vhosts/example/app.js').app));
 // LATER
app.unuse(example);

我试图外包vhosts的管理并为其他人开发工具。此应用程序使用虚拟域文件列表监视json。我可以轻松添加虚拟域,但我需要一种方法来删除它们,而无需重新启动服务本身。

1 个答案:

答案 0 :(得分:3)

快递4

您需要vhost模块,因为Express 4不再依赖Connect

使用Express 4,您可以创建一个处理所有虚拟主机的路由器,并将您的虚拟主机与其他路由隔离开来。

var vhost = require('vhost');

var vhostRouter = express.Router();
vhostRouter.use(vhost('www.example.com', exampleApp));

然后,您可以拼接vhostRouter.stack以删除虚拟主机。

<强> vhostRouter.stack

[ { handle: [Function: vhost],
    name: 'vhost',
    params: undefined,
    path: undefined,
    keys: [],
    regexp: { /^\/?(?=\/|$)/i fast_slash: true },
    route: undefined } ]

如果您使用的是应用路由器,则必须从app._router.stack

进行拼接

Express 3

req.use将中间件推送到app.stack。只需从app.stack

拼接虚拟主机即可

注意:此功能可能不存在于设计中。我不知道为什么。您应该知道,因为它不受支持,并且行为可能会在将来的版本中发生变化。