2013-10-06 89 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