Как стать автором
Обновить

Комментарии 10

Если не хотите Express — используйте Connect

image
На мой взгляд мидлвары появились как раз потому что их было вот так вот просто реализовать. Ну а потом, как говорится, понеслось, и вот — все как в тумане, а потом вдруг оказывается, что мы потеряли контроль на реквестом из респонсом и любой из 100500 разработчиков, которые приложили руку к созданию мидлваров, взятых в наш проект из сомнительных репозиториев, которые не обновлялись с 2017 года, может сделать, пусть ненароком, практически все что угодно с данным до того, как они доберутся к тому месту в программе, которое мы контролируем. И словив проблему, мы будем дебажить до рези в глазах эти цепочки вызовов мидлвар в попытке понять, что происходит.
Короче лучше свой велосипед? Я лично в таких делах воздержусь изобретать велосипед. Просто потому, что не считаю себя специалистом в этой области. Зачем мне наступать на грабли, на которые наступили впереди идущие. Для образовательных целей может быть ок, что бы понять как оно устроено, но реальном проекте вряд-ли, дороже выйдет.
Стоит выбирать транспорт (если уж брать аналогию с транспортом), который довезет тебя до пункта назначения оптимальным образом и без особых проблем в пути. И да — иногда это может быть велосипед.

Есть, например, fastify с prehandler и другие нормальные фреймворки.

Шёл 2021 год, а люди всё искали альтернативу давно умершему Экспрессу. Ещё лет через 5, возможно, они откроют для себя Коа, а потом и нормальные фреймворки.

Также middleware может и error первым параметром принять, и обработать его. Если вызвать next(err), то обработка не прекратится, поправьте меня если это не так(в контексте express).

В ExpressJS после ошибки вызывается middleware, которое задано в качестве обработчика ошибки, а следующие за упавшим игнорируются.

app.use((request, response, next) => {
    console.log('Step 1');

    next(new Error('General error'));
});

app.use((request, response, next) => {
    console.log('Step 2');

    next();
});

app.use((error, request, response, next) => {
    console.log('Got error');

    response.status(500).send('Error!');
});

В коде выше в консоли будет «Step 1» и «Got error».

И обработчиков может быть несколько, если дальше next(err) вызывать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории