Comments 7
Как раз на подобные случаи в библиотеке есть setConfig.
customMappers для личных ошибок, библиотека их отработает.
formatError если нужно свой формат ответа.
devEnvironments если надо указать свои среды для dev.
customLogger если хочется Winston/Pino а не console
Я буду делать отдельную статью по абсолютно всему функционалу библиотеки, так как тут не все. Тут я просто самый главные фичи упомянул и посмотреть хотел, что люди думают об этом.
const { setConfig, errorHandler } = require('ds-express-errors');
const logger = require('./utils/logger'); // Your Winston/Pino logger
// Optional: Customize response format and Logger
setConfig({
customLogger: logger,
customMappers: [
(err) => {
if (err.name === 'newError') {
return Errors.BadRequest()
}
}
],
devEnvironments: ['development', 'dev'],
formatError: (err, {req, isDev}) => {
return {
success: false,
error: {
code: err.statusCode,
message: err.message,
...(isDev ? { debug_stack: err.stack } : {})
}
};
}
});
const app = express();
// ... your routes ...
app.use(errorHandler);Разве в Express.js есть контроллеры?
Формально да, Express сам по себе никакую архитектуру не навязывает, и «контроллеров» как отдельного концепта в нем нет
Я в статье использую этот термин просто в привычном смысле, как слой, где живут обработчики HTTP-запросов (route handlers). В большинстве Node.js проектов их все равно так называют, вот и прижилось да и я по привычке.
У каждого разработчика свой набор библиотек, виды ошибок, поэтому я дак лично сам себе реализовал такое же и никому не хочу давать :D
Как раз на подобные случаи в библиотеке есть setConfig.
customMappers для личных ошибок, библиотека их отработает.
formatError если нужно свой формат ответа.
devEnvironments если надо указать свои среды для dev.
customLogger если хочется Winston/Pino а не console
Я буду делать отдельную статью по абсолютно всему функционалу библиотеки, так как тут не все. Тут я просто самый главные фичи упомянул и посмотреть хотел, что люди думают об этом.
const { setConfig, errorHandler } = require('ds-express-errors');
const logger = require('./utils/logger'); // Your Winston/Pino logger
// Optional: Customize response format and Logger
setConfig({
customLogger: logger,
customMappers: [
(err) => {
if (err.name === 'newError') {
return Errors.BadRequest()
}
}
],
devEnvironments: ['development', 'dev'],
formatError: (err, {req, isDev}) => {
return {
success: false,
error: {
code: err.statusCode,
message: err.message,
...(isDev ? { debug_stack: err.stack } : {})
}
};
}
});
const app = express();
// ... your routes ...
app.use(errorHandler);На ds-express-errors.dev это все подробно описано, даже есть примери как выглядит код до внедрения библиотеки и после (на примере mongoose), пока только 1 пример, но планирую написать много разных.
Как вариант, перейти на koa, те же создатели, та же архитектура, но из коробки есть поддержка async/await
Причём, переписать на коа - это не такая и сложная задача, заденете только обработчики методов и роутинг
Хватит писать try-catch в контроллерах: как я причесал ошибки в Express и перестал бояться деплоя