Совместное использование страницы 404 в приложениях node.js, подключенных через VHOST - PullRequest
1 голос
/ 05 января 2012

Я новичок в 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 между несколькими vhosts?

1 Ответ

0 голосов
/ 05 января 2012

У вас есть 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' });
...