Обрабатывать ошибки с ExpressJS - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь обработать ошибки 503 и 500 с помощью ExpressJS, но он работает только с ошибкой 404.

Мое промежуточное ПО:

var error = function(server) {

  // 404
  server.app.use(function(request, response) {
    response.status(404);
    response.redirect('/404');
  });

  // 500
  server.app.use(function(error, request, response, next) {
    response.status(500);
    response.redirect('/500');
    next(error);
  });

  // 503
  server.app.use(function(error, request, response, next) {
    response.status(503);
    response.redirect('/503');
    next(error);
  });
};

module.exports = error;

Функция вмой контроллер (используя маршруты):

function error500(request, response) {
  response.render('0-templates/' + response.locals.options.template + '/500', {
    _layoutFile: false,
    error: //how to get the error ?
  });
}

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Не уверен, почему вы используете 3 разные функции, так как у вас есть только один обработчик ошибок в экспрессе, вы можете использовать что-то вроде:

server.app.use((err, req, res, next) => {
  if (err.code) {
    res.status(err.code);
    console.log(err);
    return res.redirect('/'+err.code);
  } else {
    res.status(500);
    console.log(err);
    return res.redirect('/500');
  }
});

или что-то подобное, чтобы выполнить ответ об ошибке, который выследует вызвать next(err) из вашего логического кода

Источники: здесь и здесь

0 голосов
/ 13 февраля 2019

Вам не хватает аргумента error для обратного вызова 404, из-за чего express считает, что это промежуточное ПО , а не обработчик ошибок ,поэтому возвращая 404 для каждого запроса, проходящего через указанное связующее ПО .

Вы также должны добавить аргумент next ко всем обработчикам ошибок .

From экспресс-документация по обработке ошибок :

Определить функции промежуточного программного обеспечения для обработки ошибок так же, как и другие функции промежуточного программного обеспечения, за исключением того, что функции обработки ошибок имеют четыре аргумента вместо трех: (err,req, res, next).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...