2013-10-06 122 views
4

嘗試設置connect的虛擬主機中間件。會喜歡一些幫助。Express.js vhost子域名設置

我有我的正常express.js應用程序,與node_modules,公共,視圖和路由目錄。我在另一個express.js應用程序的旁邊添加了另一個目錄。

我已經添加了此行我的頂級應用程序(tedxgramercy):

app.use(express.vhost('chatter.tedxgramercy.com', require('./chatter/app.js').app)); 

而此行給我嘮應用:

var app = exports.app = express(); 

喋喋不休應用撥打電話8000端口監聽,主要(頂級)應用程序調用監聽端口3000.我不知道這是否正確。

當我啓動我的應用程序(節點應用程序)時,它運行良好,我可以分別訪問localhost:3000和localhost:8000上的兩個應用程序,但是當我部署到我的服務器時,子域http://chatter.tedxgramercy.com不起作用。

任何指針?我必須更改我的DNS以指向其他端口嗎?

+0

URL中的主機名需要與您的代碼中的主機名完全匹配(除非您使用glob模式),因此請嘗試執行'vhost('chatter.tedxgramercy.com')'或'vhost('chatter。*' )'。 –

+0

我做到了,但沒有運氣。 – Costa

回答

7

這是一個簡單的,但有點棘手的設置。

一,主要app.js

var vhost = require('vhost'); 

app.use(vhost('chatter.tedxgramercy.com', require('./chatter/app').app)) 
app.use(router); 

我包括路由器,使之清楚,這是至關重要的它配置虛擬主機後使用

然後,在chatter/app.js

var express = require('express'); 
var app = express(); 
var path = require('path'); 

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

var router = express.Router(); 

router.get('/', function(req, res, next) { 
    res.render('index'); 
}); 

app.use(router); 

exports.app = app; 

這是最起碼的設置,以使在子應用程序玉模板。請注意,應用程序已導出,但由於主應用程序是服務器,因此沒有實際啓動服務器。

+1

錯誤:大多數中間件(如vhost)不再與Express捆綁在一起,必須單獨安裝。 – AlxVallejo