2012-06-29 30 views
5

我正在使用vhost express/connect中間件,對於如何使用它我有點困惑。我希望將一組路由應用於具有子域的主機,另一組路由適用於沒有子域的主機。使用vhost中間件在Express中指定子域路由

在我的app.js文件,我有

var app = express.createServer(); 

app.use...(middlware)... 
app.use(express.vhost('*.host', require('./domain_routing')("yes"))); 
app.use(express.vhost('host', require('./domain_routing')("no"))); 
app.use...(middlware)... 

app.listen(8000); 

,然後在domain_routing.js

module.exports = function(subdomain){ 

    var app = express.createServer(); 

    require('./routes')(app, subdomain); 

    return app; 
} 

,然後在routes.js我打算就是否子域變量運行臺路線,依賴通過的是"yes""no"

我在正確的軌道上,還是這不是你如何使用這個中間件?我有點困惑,有兩個app服務器實例正在創建(因爲這是網上的例子似乎做的事情)。我應該改爲使用原來的app服務器實例,而不是創建一個單獨的子域代替路由器嗎?

回答

2

是的,你是在正確的軌道上。您應爲應爲爲每個虛擬主機有不同的服務器實例。無論是http.Server還是express app

如果您通過原始app,您發送到虛擬主機的請求將發送到原始應用程序。因此,除非虛擬主機具有原始服務器中未使用的路徑,否則它將得到響應,就像請求發送到原始服務器一樣。

從連接文檔

connect() 
    .use(connect.vhost('foo.com', fooApp)) 
    .use(connect.vhost('bar.com', barApp)) 
    .use(connect.vhost('*.com', mainApp)) 
+0

謝謝!而我的另一個問題是,如果我指定要用於原始服務器實例的中間件,然後使用單獨的服務器實例作爲虛擬主機,那麼用於原始服務器的中間件是否會轉移到虛擬主機?或者我應該在vhost上專門使用中間件(除了原始服務器上的虛擬主機中間件)基本上,我正在尋找一種在所有可能的虛擬主機上使用中間件的無縫方式,而不是必須明確地使用相同的中間件每一個虛擬主機都是重複的... – user730569

+0

不,你不需要在所有虛擬主機上專門使用中間件。任何想要用於所有應用程序的中間件都可以在虛擬主機使用前使用'.use''d –

+0

太棒了!但出於好奇,這是如何工作的?我猜我對於server.emit(「request」,req,res);'幕後操作有點困惑。 – user730569