2014-08-29 53 views
1

方面Express.js unuse/remove vhost?

我有一個單一的服務器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); 

我想外包虛擬主機的管理和開發別人可以的工具。此應用程序使用虛擬域文件列表監控json。我可以輕鬆添加虛擬域,但我需要一種方法來刪除它們而無需重新啓動服務本身。

回答

3

Express 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


拼接快遞3

req.use推到中間件app.stack。只需拼接虛擬主機從app.stack


注意:此功能可能不存在設計。我不知道爲什麼。你應該知道,因爲它不被支持,並且行爲在未來的版本中可能會改變。