Express.js unuse /删除虚拟主机?

上下文

我有一个单一的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); 

我正试图把虚拟主机的pipe理工作外包出去,为别人开发一个工具。 此应用程序使用虚拟域文件列表监控json。 我可以轻松地添加虚拟域,但我需要一种方法来删除它们,而无需重新启动服务本身。

快递4

因为Express 4不再依赖Connect所以需要vhost模块。

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

 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进行拼接


快递3

req.use将中间件推到app.stack 。 从app.stack简单地拼接虚拟主机


注意:此function可能不存在devise。 我不知道为什么。 你应该知道,因为它不被支持,行为可能在未来的版本中改变。