13

我想知道从客户端向服务器发送数据时在 node.js 中使用 request.body 或 request.params 是否有任何偏好?

4

3 回答 3

14

您可以在正文中放置比在 url 中更多(多样化)的数据。您可以在正文中传递任何字符串(特殊字符),而在 url 中对它们进行编码会使您容易受到状态 414(请求 URI 太长)的影响。而且在传递数组和复杂对象时使用主体要容易得多:)

于 2013-08-12T13:41:27.233 回答
9

我想说最好的做法是在获取时应该使用参数,但在发布、放置和修补时使用主体。

样品得到

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 

您也可以添加验证,但这就是我编写所有端点的方式。

于 2013-08-12T23:42:58.693 回答
7

自从提出这个问题以来已经超过 4 年了,但是,我仍然会插话以确保其他偶然发现这篇文章的人有更多信息来更好地理解这个概念。

req.body 和 req.params 服务器有两种不同的用途。

当您需要将数据发送到服务器(以存储它或其他东西)时,您将使用 req.body ,例如在对服务器的“POST”请求中。例如,检查以下内容:

您正在向 mongodb 发出“POST”请求以保存博客文章。在这种情况下,您可能希望获取请求正文中的数据并将其发送到数据库。在这里你会使用 req.body

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

req.params 用于从 url 中提取“参数”。假设您要提取作为 url 一部分的“id”。例如,“id”是问题 stackoverflow.com/questions/18187424/ 之后的以下 url 中的数字

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

希望能帮助到你。

谢谢, 卡提克

于 2017-08-12T07:32:28.093 回答