Как обрабатывать ошибки разработчика в Express.js? - PullRequest
0 голосов
/ 19 октября 2018

Я должен различать операционные ошибки и ошибки программиста (разработчика).Все ошибки со свойством stack помечаются как ошибки разработчика.Я регистрирую их и выхожу из строя на сервере.

Мой вопрос заключается в том, правильно ли этот подход идентифицирует все ошибки программистов (пытался прочитать свойство «undefined», вызывал асинхронную функцию без обратного вызова, передавал «строку», где ожидался объект или int и т. Д.))

Вот мой обработчик ошибок:

app.use((err, req, res, next) => {
  // Delegate to the default Express error handler,
  // when the headers have already been sent to the client
  if (res.headersSent) return next(err);

  // Decorate with additional properties from Boom
  // If err has no specified status code or there is a stack, it is most likely a programmer error.
  // Server must crash and restart. Default error code is set to 'Internal Server Error (500)'
  const options = err.stack || !err.statusCode
    ? { data: { stack: err.stack || 'n/a', developerError: true } }
    : {};
  if (!err.isBoom) boom.boomify(err, options);

  // Add more details
  const message = {
    ...err,
    originalUrl: req.originalUrl,
    method: req.method,
    ip: req.ip
  };

  // Log server errors only. No need to log 402, 403 etc.
  if (err.isServer) winston.error(message);

  // Crash server in case of a developer error.
  // NOTE: a Node.js process manager should be set up to immediately restart the crashed server
  // eslint-disable-next-line no-process-exit
  if (err.data && err.data.developerError) process.exit(1);

  return res.status(err.output.statusCode).json(message);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...