Я должен различать операционные ошибки и ошибки программиста (разработчика).Все ошибки со свойством 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);
});