上下文
我有一台带有单个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。我可以轻松添加虚拟域,但我需要一种方法来删除它们,而无需重新启动服务本身。
答案 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
注意:此功能可能不存在于设计中。我不知道为什么。您应该知道,因为它不受支持,并且行为可能会在将来的版本中发生变化。