快递:req.params与req.body(JSON)

时间:2019-02-27 10:15:37

标签: node.js rest express

哪个更正确?为什么?是否取决于场景?有标准吗?

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 :(得分:7)

这个问题更多的是关于RESTful API约定,而不是节点或表达。基于普遍接受的REST conventions,这是基本的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更合适。

EDIT :支持这种情况的另一个有用资源:10 best practices for better RESTful API

答案 1 :(得分:3)

req.body用于访问您“发布”的实际表单数据。

req.params用于路由参数,在您的情况下,userId用于参数:

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

官方文档:

需求主体

  

包含在请求中提交的键/值数据对   身体。默认情况下,它是未定义的,并且在使用时填充   人体分析中间件,例如人体分析器和multer。

Link to req.body docs

req.params

  

此属性是一个对象,其中包含映射到的属性   命名的路线“参数”。例如,如果您有路线   / user /:name,则“ name”属性可作为req.params.name使用。   该对象默认为{}。

Link to req.params docs

如果您要在路由中实现依赖(现有用户的)ID的保护措施或任何其他逻辑,请在参数中传递userID。

比方说,您正在提交一个新用户注册的表单。您不希望在参数中发送凭据,因为它是机密数据并且可以通过这种方式轻松访问。在这里将这些值放入请求正文并因此使用req.body是有意义的。

正如Haris Bouchlis在他的回答中已经提到的,这取决于您想要执行的CRUD-op。

答案 2 :(得分:0)

在这种情况下,我建议使用req.params.userId。

常规API条目具有此标准。要获得所有用户,路径将为“ / users”。 要检索或更新特定用户,路径为“ / users / 1”。

API example

答案 3 :(得分:0)

是的,完全不同,用于不同的目的

1.req.params来自与路径定义中的参数匹配的URL路径段,例如/ song /:songid。因此,使用使用该名称和URL的路由(例如/ song / 48586),然后req.params.songid ===“ 48586”。

2.req.body属性来自一个表单发布,其中表单数据(在正文内容中提交)已被解析为body标签的属性。