Express.js 虚拟主机子域设置

Posted

技术标签:

【中文标题】Express.js 虚拟主机子域设置【英文标题】:Express.js vhost subdomain set up 【发布时间】:2013-10-13 07:47:43 【问题描述】:

尝试设置 connect 的 vhost 中间件。希望得到一些帮助。

我有一个普通的 express.js 应用程序,带有 node_modules、public、views 和 routes 目录。我在包含另一个 express.js 应用程序的目录旁边添加了另一个目录。

我已将此行添加到我的***应用程序 (tedxgramercy):

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

我的聊天应用程序的这一行:

var app = exports.app = express();

chatter 应用调用监听端口 8000,主(***)应用调用监听端口 3000。我不知道这是否正确。

当我启动我的应用程序(节点应用程序)时,它运行良好,我可以分别访问 localhost:3000 和 localhost:8000 上的两个应用程序,但是当我部署到我的服务器时,子域 http://chatter.tedxgramercy.com 不起作用。

任何指针?我是否必须更改我的 DNS 以指向其他端口或其他什么?

【问题讨论】:

URL 中的主机名需要与代码中的主机名完全匹配(除非您使用 glob 模式),因此请尝试使用 vhost('chatter.tedxgramercy.com')vhost('chatter.*') 我做到了,但没有运气。 【参考方案1】:

这是一个简单但有些棘手的设置。

一、主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;

这是在子应用中呈现 Jade 模板的最低限度设置。请注意,应用程序已导出,但实际上并没有启动任何服务器,因为主应用程序是服务器。

【讨论】:

错误:大多数中间件(如 vhost)不再与 Express 捆绑,必须单独安装。 需要澄清一下:为什么在 chatter/app.js 中使用路由器? app.get('/') 也一样

以上是关于Express.js 虚拟主机子域设置的主要内容,如果未能解决你的问题,请参考以下文章

Apache 虚拟主机不适用于子域

使用 WordPress 多站点创建子域时自动更新 Windows 8 主机文件

本地主机,子域,使用 XAMPP

使用 Route 53 设置子域亚马逊

使用虚拟数据库在自己的环境中测试 express.js 应用程序

Express.JS 服务器连接到远程网络上的主机