Мне трудно понять, почему люди проповедуют Koa как решение проблемы «обезьяньего патча» (тогда как нужно модифицировать предварительно упакованный код). (см. https://www.quora.com/Should-I-learn-Express-js-or-Koa-js-for-node/answer/Yvan-Scher?share=1 или http://blog.onclickinnovations.com/koa-js/).
Чем Коа особенный в этом отношении? Почему в этом отношении Hapi или Express не одно и то же?
@estus Я думаю, что это утверждение скорее касается сторонних модулей npm, которые «требуются» в приложении. Неужели как-то проще обезьяньим патчить сторонние модули в Коа? (править: возможно, я перечитал это)
Зависит от модуля. Express может потребоваться использовать больше хаков, чтобы все заработало. Предлагаю пригласить автора к участию. С Hapi все по-другому, потому что он не пытается создать монстра Франкенштейна из http API, в отличие от Express и Koa. Как бы то ни было, с точки зрения дизайна у него есть свои недостатки.





Проработав Koa в течение 2 лет и недавно использовав несколько express.js, я наткнулся на один большой пример этого.
Допустим, у вас есть контроллер, который выдает ответ, и вы хотите перехватить этот ответ и что-то с ним сделать (например, сжать его или преобразовать в другой формат).
Это легко работает изначально с koa, потому что вы можете просто сделать что-то вроде этого:
function myMw(ctx, next) {
await next();
ctx.response.body = gzip(ctx.response.body);
}
Это вымышленный пример, но идею вы поняли.
С выражением вашего кода это выглядит как абсолютный мусор. Легко увидеть в промежуточном программном обеспечении express gzip:
https://github.com/expressjs/compression/blob/master/index.js
Это связано с тем, что промежуточное программное обеспечение экспресс-обработки обеспечивает прямой доступ к HTTP-сокету для записи ответов (с send()).
Я подозреваю, что отсюда это мнение. Честно говоря, я не понимаю, почему люди до сих пор используют Express. Я считаю, что это в основном привычное и огромное количество руководств. Экспресс было отличный, но больно сегодня.
Хорошо, спасибо за ответ! И как вы думаете, где Hapi вписывается в эту картину с точки зрения этого настроения?
У меня нет опыта работы с Hapi, извините!
Тогда не беспокойтесь! Спасибо за Ваш ответ!
Лучше спросите человека, который сделал это заявление. Но поскольку Koa был написан с нуля и не должен носить с собой багаж Express (включая ранние антипаттерны Node), код стал более аккуратным. Например. маршрутизатор отделен от фреймворка. Чтобы изменить поведение
app.getв Express, вам потребуется пропатчить маршрутизатор.