使用 connect vhost 为多个 express.js 应用程序提供服务
Posted
技术标签:
【中文标题】使用 connect vhost 为多个 express.js 应用程序提供服务【英文标题】:Using connect vhost to serve multiple express.js apps 【发布时间】:2012-09-01 20:56:15 【问题描述】:我想使用 connect 的 vhost 功能将多个 express.js 应用程序部署到我的 dev vps。这是我的 server.js 文件,它应该将请求发送到适当的位置:
var express = require('express')
var quotes = require('quote-of-the-day/lib/app.js');
var server = express();
server.use(express.vhost('inspiringquoteoftheday.com',quotes));
server.listen(80);
运行 node server.js 会抛出这个错误:
Error: Cannot find module 'quote-of-the-day/lib/app.js'
即使我可以直接从 server.js 所在的目录 cd 进入 app.js。
这是我导出 express 应用程序的 lib/app.js 文件(我认为)
// Generated by CoffeeScript 1.3.3
(function()
var app, express, pub;
express = require('express');
module.exports = app = express();
pub = __dirname + '/public';
app.use(express["static"](pub));
app.use(express.errorHandler());
app.use(app.router);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.get('/', function(req, res)
return res.render('home');
);
).call(this);
【问题讨论】:
【参考方案1】:假设目录结构如下所示:
|-. quote-of-the-day
|-- server.js <-- the file you list in your question
|-. lib
|-- app.js
那么你应该要求你的app.js
require('./lib/app');
【讨论】:
我的目录结构有点不同......但我忘记了那个漂亮的小 ./ 因为暂时不在 ubuntu 上。谢谢【参考方案2】:在此处使用 __dirname 全局变量可能会有所帮助。 它提供了“当前执行脚本所在目录的名称。” 因此你可以这样做:
var otherApp = require(__dirname + 'quote-of-the-day/lib/app.js')
http://nodejs.org/docs/latest/api/globals.html
【讨论】:
以上是关于使用 connect vhost 为多个 express.js 应用程序提供服务的主要内容,如果未能解决你的问题,请参考以下文章
多个域上的 Node.js 使用 express.vhosts()