在通过VHOST连接的node.js应用程序之间共享404页面

时间:2012-01-05 09:38:23

标签: node.js express vhosts

对于node.js和网络编程,我是一个新手,所以如果我提出一些奇怪的问题,这是一个借口:D

所以这就是我设置express node.js项目的方式。
我有一个顶级的app.js只是为了将流量重定向到几个子域:

var app = module.exports = express.createServer(options);
app.use(express.vhost('blog.localhost', require('./apps/blog/blog.js')));
app.use(express.vhost('app1.localhost', require('./apps/app1/app1.js')));
app.use(express.vhost('login.localhost', require('./apps/login/login.js')));

在每个通过require()包含的子应用程序中,我只返回一个新的快速服务器:

module.exports = express.createServer(options);

设置404页面最优雅的方法是什么?当我只使用一个应用程序时,我只是使用

app.use(function(req, res, next){
  res.render('404', {
  });
});

但是如果我使用这种方法,我将不得不为每个应用程序创建一个404.jade,我不喜欢代码中无用的重复。知道如何在多个虚拟主机之间共享单个404逻辑吗?

1 个答案:

答案 0 :(得分:0)

您有3台主机需要3个路由文件。我的建议是从外部文件中要求每条404路由。 这样你就可以拥有每个主机的404路由,但它只会驻留在一个地方。

示例:

404路线文件 - 404.js

module.exports = function (app, req, res, options) {
  app.get('/404', function(req, res, next) {
    res.render('404', { options: options });
  });
}

主机A的路由

// define other routes here
...
// you pass the app, req, res as params
// the last param is for local vars sent to the view
require('./routes/404.js')(app, req, res, { host: 'HostA' });