Есть ли разница между использованием request.body или request.params в node.js?

Мне интересно, есть ли какие-либо предпочтения в использовании request.body или request.params в node.js при отправке данных с клиента на сервер?


person Samir Alajmovic    schedule 12.08.2013    source источник


Ответы (3)


Вы можете разместить больше (разнообразных) данных в теле, чем в URL-адресе. Вы можете передать любую строку (специальные символы) в теле, а кодирование их в URL-адресе сделает вас уязвимым для статуса 414 (слишком длинный URL-адрес запроса). И намного проще использовать тело при передаче массивов и сложных объектов :)

person randunel    schedule 12.08.2013

Прошло более 4 лет с тех пор, как был задан этот вопрос, однако я все равно вмешаюсь, чтобы убедиться, что кто-то еще, наткнувшись на этот пост, имеет больше информации, чтобы лучше понять эту концепцию.

Сервер req.body и req.params для двух разных целей.

вы бы использовали req.body, когда вам нужно отправить данные на сервер (чтобы сохранить их или что-то еще), например, в запросе «POST» на сервер. Например, проверьте следующее:

Вы делаете запрос «POST» в mongodb, чтобы сохранить сообщение в блоге. В этом сценарии вы хотели бы получить данные, поступающие в тело запроса, и отправить их в базу данных. Здесь вы должны использовать req.body

app.post("/blog", function(req, res){
  var data = req.body.blog;
  .... // code to send data to the db
  ....
});

req.params используется, когда вы хотите извлечь «параметр» из URL-адреса. допустим, вы хотите извлечь «id», который является частью URL-адреса. Например, «id» — это число в следующем URL-адресе после вопросов stackoverflow.com/questions/18187424/

app.get("/xyz/questions/:id", function(req, res){
  var useId = req.params.id;
  ...
  ...
});

Надеюсь, поможет.

Спасибо, Картик

person kartik    schedule 12.08.2017

Я бы сказал, что лучше всего использовать параметры при выполнении получения, но использовать тело для публикации, установки и исправления.

образец получить

app.get "/api/items/:id", (req, res) ->
  itemController.getItem req.params.id, (item, error) =>      
     if !error
       res.send 'item': item
     else
       res.send 'error: error 

образец поста

app.post "/api/items", (req, res) ->
  itemController.saveItem req.body, (item, error) =>      
     if !error
       res.send 'item': item
     else
       res.send 'error: error 

Вы бы также добавили проверку, но именно так я писал все свои конечные точки.

person WallMobile    schedule 12.08.2013
comment
Я думаю, что запросы на удаление обычно не содержат тела. По крайней мере, Google App Engine обеспечивает это. - person bgenchel; 20.08.2015