Как Коа помогает избежать «обезьяньего патча» и почему «Хапи» или «Экспресс» не делают того же?

Мне трудно понять, почему люди проповедуют 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 не одно и то же?

Лучше спросите человека, который сделал это заявление. Но поскольку Koa был написан с нуля и не должен носить с собой багаж Express (включая ранние антипаттерны Node), код стал более аккуратным. Например. маршрутизатор отделен от фреймворка. Чтобы изменить поведение app.get в Express, вам потребуется пропатчить маршрутизатор.

Estus Flask 15.09.2018 20:08

@estus Я думаю, что это утверждение скорее касается сторонних модулей npm, которые «требуются» в приложении. Неужели как-то проще обезьяньим патчить сторонние модули в Коа? (править: возможно, я перечитал это)

Emilio 15.09.2018 20:15

Зависит от модуля. Express может потребоваться использовать больше хаков, чтобы все заработало. Предлагаю пригласить автора к участию. С Hapi все по-другому, потому что он не пытается создать монстра Франкенштейна из http API, в отличие от Express и Koa. Как бы то ни было, с точки зрения дизайна у него есть свои недостатки.

Estus Flask 15.09.2018 22:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
183
1

Ответы 1

Проработав 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 вписывается в эту картину с точки зрения этого настроения?

Emilio 15.09.2018 20:54

У меня нет опыта работы с Hapi, извините!

Evert 15.09.2018 20:55

Тогда не беспокойтесь! Спасибо за Ваш ответ!

Emilio 15.09.2018 20:57
Честно говоря, я не понимаю, почему люди до сих пор используют Express - потому что они ориентированы на результат. Экосистема Express обширна. Фреймворк может сам по себе поражать воображение, но если он требует от вас изобретать велосипед или самостоятельно исследовать вещи, никто не может задокументировать их или ответить на ваш вопрос, это просто стопор.
Estus Flask 15.09.2018 22:35

Другие вопросы по теме