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

Posted

技术标签:

【中文标题】在通过 VHOST 连接的 node.js 应用程序之间共享 404 页面【英文标题】:Sharing 404 page across node.js apps connected via VHOST 【发布时间】:2012-02-03 03:30:41 【问题描述】:

我对 node.js 和一般的 web 编程有点陌生,所以如果我问奇怪的问题,请原谅: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】:

您有 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' );

【讨论】:

感谢您的快速回复。我试图避免这种依赖,因为在主机 A 中运行的应用程序必须知道主应用程序的目录结构。也许这是实现这一目标的唯一方法。 除非你想在任何地方复制它,这是唯一的方法。

以上是关于在通过 VHOST 连接的 node.js 应用程序之间共享 404 页面的主要内容,如果未能解决你的问题,请参考以下文章

Node.js:为虚拟主机(vhost)使用站点地图

将 Node.js 的 Express 与 vhost 一起使用时出现意外错误

NGROK + WEB-SERVER + NODE.JS + WEBSOCKET + NPM

Node.js Heroku 应用程序上的 TCP 连接

通过 Nginx 在 Node.js 上的服务器发送事件连接超时

rabbitmq vhost