Комментарии 10
Если не хотите Express — используйте Connect


На мой взгляд мидлвары появились как раз потому что их было вот так вот просто реализовать. Ну а потом, как говорится, понеслось, и вот — все как в тумане, а потом вдруг оказывается, что мы потеряли контроль на реквестом из респонсом и любой из 100500 разработчиков, которые приложили руку к созданию мидлваров, взятых в наш проект из сомнительных репозиториев, которые не обновлялись с 2017 года, может сделать, пусть ненароком, практически все что угодно с данным до того, как они доберутся к тому месту в программе, которое мы контролируем. И словив проблему, мы будем дебажить до рези в глазах эти цепочки вызовов мидлвар в попытке понять, что происходит.
Короче лучше свой велосипед? Я лично в таких делах воздержусь изобретать велосипед. Просто потому, что не считаю себя специалистом в этой области. Зачем мне наступать на грабли, на которые наступили впереди идущие. Для образовательных целей может быть ок, что бы понять как оно устроено, но реальном проекте вряд-ли, дороже выйдет.
Стоит выбирать транспорт (если уж брать аналогию с транспортом), который довезет тебя до пункта назначения оптимальным образом и без особых проблем в пути. И да — иногда это может быть велосипед.
Есть, например, fastify с prehandler и другие нормальные фреймворки.
Шёл 2021 год, а люди всё искали альтернативу давно умершему Экспрессу. Ещё лет через 5, возможно, они откроют для себя Коа, а потом и нормальные фреймворки.
Следующий этап понимания — а зачем мне middleware (в понимании express, где каждый норовит сунуть что нибудь в request)? )
Также middleware может и error первым параметром принять, и обработать его. Если вызвать next(err), то обработка не прекратится, поправьте меня если это не так(в контексте express).
В ExpressJS после ошибки вызывается middleware, которое задано в качестве обработчика ошибки, а следующие за упавшим игнорируются.
В коде выше в консоли будет «Step 1» и «Got error».
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».
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Хочу middleware, но не хочу ExpressJS