Передача кода с обычным объектом Error - это нормально, но code
слишком обобщенный и может использоваться другими ошибками, поэтому httpCode
может быть лучше.
Но я бы личнопредпочитаю использовать пользовательские классы, чтобы мне не приходилось запоминать коды ошибок или случайно набирать номера, и вы можете четко определить, что это действительно ошибка, представляющая код ошибки http, и что code
не относится к чему-либоelse.
Таким образом, установка может выглядеть так:
class HttpError extends Error {
constructor(code, message) {
super(message)
this.code = code
}
}
class BadRequestError extends HttpError {
constructor(message) {
super(400, message)
}
}
А промежуточное ПО для обработки ошибок может выглядеть так:
const env = process.env.NODE_ENV;
const ErrorHandler = (error, req, res, next) => {
if( error instanceof HttpError ) {
res.status(error.code || 500)
} else {
// maybe some additional internal logging that a "wrong" error object arrived here
res.status(500)
}
if (env === 'production') {
res.send();
} else {
res.send(error.stack);
}
};
module.exports = ErrorHandler;