Экспресс: req.params против req.body (JSON) - PullRequest
0 голосов
/ 27 февраля 2019

Что правильнее и почему?Зависит ли это от сценария?Есть ли стандарт?

router.post("/user", function(req, res) {
  let thisUserId = req.body.userId;
});

router.post("/user/:userId", function(req, res) {
  let thisUserId = req.params.userId;
}

Спасибо!

Ответы [ 4 ]

0 голосов
/ 27 февраля 2019

Да, они совершенно разные и используются для разных целей

1.req.params происходит из сегментов пути URL, которые соответствуют параметру в определении маршрута, например / song /: songid.Итак, с маршрутом, использующим это обозначение, и URL-адресом, таким как / song / 48586, свойства req.params.songid === "48586".

2.req.body берутся из сообщения формы, гдеДанные формы (представленные в содержании тела) были проанализированы в свойствах тега тела.

0 голосов
/ 27 февраля 2019

В этом случае я советую использовать req.params.userId.

Обычные записи API имеют этот стандарт.Чтобы получить всех пользователей, путь будет «/ users».Чтобы получить или обновить конкретного пользователя, путь будет '/users/1'.

Пример API

0 голосов
/ 27 февраля 2019

Этот вопрос больше о соглашениях RESTful API, чем об узле или экспрессе.Основываясь на общепринятых REST-соглашениях , это базовая операция CRUD:

/* fetch all users */
GET /users 

/* fetch specific user */
GET /users/:userId

/* create new user */
POST /users 

/* edit specific user */
PUT /users/:userId

/* delete specific user */
DELETE /users/:userId

Так что в вашем случае я бы сказал, что req.body более уместно, учитывая, что вы хотите создать пользователя.

РЕДАКТИРОВАТЬ : еще один полезный ресурс, который поддерживает этот случай: 10 лучших практик для улучшения RESTful API .

0 голосов
/ 27 февраля 2019

req.body используется для доступа к фактическим данным формы, которые вы «разместили».

req.params используется для параметров маршрута, в вашем случае userId, который передается в параметрах:

router.post("/user/:userId", function(req, res) {
  let thisUserId = req.params.userId;
}

Официальные документы:

req.body

Содержит пары ключ-значение данных, представленных в теле запроса.По умолчанию он не определен и заполняется при использовании промежуточного программного обеспечения для анализа тела, такого как body-parser и multer.

Ссылка на req.body docs

req.params

Это свойство представляет собой объект, содержащий свойства, сопоставленные с именованным маршрутом «параметры».Например, если у вас есть имя маршрута / пользователя /:, тогда свойство «имя» доступно как req.params.name.Этот объект по умолчанию равен {}.

Ссылка на req.params docs

Если вы хотите реализовать в вашем маршруте охрану или любую другую логику, которая опирается на этот идентификатор (существующего пользователя)), вы передаете userID в параметрах.

Допустим, вы отправляете форму, где регистрируется новый пользователь .. Вы не хотите отправлять учетные данные в параметрах, так как это конфиденциальные данные и легко доступны для этогопуть.Здесь имеет смысл поместить эти значения в тело запроса и использовать поэтому req.body ..

Как уже упоминал в своем ответе Харис Баучлис, это зависит от ваших CRUD-операций, которые вы хотели бы выполнить.

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