Pull to refresh

Comments 7

PinnedPinned comments

Как раз на подобные случаи в библиотеке есть 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 сам по себе никакую архитектуру не навязывает, и «контроллеров» как отдельного концепта в нем нет

Я в статье использую этот термин просто в привычном смысле, как слой, где живут обработчики 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

Причём, переписать на коа - это не такая и сложная задача, заденете только обработчики методов и роутинг

Ага, если req и res как спрут не проникли в репозитории )))

Смысл переходить на koa? Она морально устарела. Есть более подходящие фреймворки - hono, elisia. В которых и ts нормально поддерживает и многие вещи, по типу валидации, sse и прочего закрыты достаточно нативно.

Sign up to leave a comment.

Articles