Expressjs маршрутизатор более высокого порядка по сравнению с добавлением к запросу - PullRequest
1 голос
/ 05 мая 2020

Допустим, я хочу передать объекту обратный вызов маршрута ExpressJS.

Я знаю, что могу добавить к app:

// router.js
const getFoo = (req, res) => res.json(req.app.foo);

// index.js
const app = express();
app.foo = {};
app.get('/foo', getFoo);

или могу использовать функцию более высокого порядка:

// router.js
const getFoo = foo => (req, res) => res.json(foo);

// index.js
const app = express();
const foo = {};
app.get('/foo', getFoo(foo));

Оба легко написать, расширить и тест. Но я не знаю, каковы последствия решений и лучше ли одно.

Есть ли кто-нибудь, кто знает реальные различия между двумя подходами?

Ответы [ 3 ]

3 голосов
/ 05 мая 2020

Я думаю, что второе решение более правильное, вот почему.

представьте, что вы привыкли к первому решению, и однажды вам нужно отправить что-то под названием post или get или что-нибудь с этим именем свойства app, и вы забываете, что уже существует свойство с таким именем, поэтому вы переопределяете исходное свойство, даже не осознавая, и когда вы вызываете app.post(), программа выскакивает sh.

Поверьте мне, вы не хочу, чтобы часы исследования были потрачены впустую на что-то подобное и понимали, что вы просто переопределяете исходный метод

Кроме того, на мой взгляд, всегда плохая идея изменять исходный объект, который был создан не вами

0 голосов
/ 05 мая 2020

Второе решение легко позволяет вам передавать другое значение для foo на разных маршрутах, если вы когда-либо обнаруживали в этом необходимость.

Первое решение, по сути, помещает значение в синглтон app , что влечет за собой все последствия использования синглтонов. (И, как упоминалось @Anees, для express, в частности, настройки app с get и set являются подходящим местом для хранения это, а не настраиваемое свойство)

0 голосов
/ 05 мая 2020

Как упоминал @ vahe-yavrumian, не рекомендуется изменять состояние объекта, созданного сторонней библиотекой.

между ними вы также можете использовать методы app.get() и app.set() для передачи любые данные для других маршрутизаторов в очереди (кажется, эти методы существуют только для этой цели.)

дополнительная информация https://expressjs.com/en/api.html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...