哪个更正确?为什么?是否取决于场景?有标准吗?
router.post("/user", function(req, res) {
let thisUserId = req.body.userId;
});
router.post("/user/:userId", function(req, res) {
let thisUserId = req.params.userId;
}
谢谢!
答案 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。
req.params
此属性是一个对象,其中包含映射到的属性 命名的路线“参数”。例如,如果您有路线 / user /:name,则“ name”属性可作为req.params.name使用。 该对象默认为{}。
如果您要在路由中实现依赖(现有用户的)ID的保护措施或任何其他逻辑,请在参数中传递userID。
比方说,您正在提交一个新用户注册的表单。您不希望在参数中发送凭据,因为它是机密数据并且可以通过这种方式轻松访问。在这里将这些值放入请求正文并因此使用req.body
是有意义的。
正如Haris Bouchlis在他的回答中已经提到的,这取决于您想要执行的CRUD-op。
答案 2 :(得分:0)
在这种情况下,我建议使用req.params.userId。
常规API条目具有此标准。要获得所有用户,路径将为“ / users”。 要检索或更新特定用户,路径为“ / users / 1”。
答案 3 :(得分:0)
是的,完全不同,用于不同的目的
1.req.params来自与路径定义中的参数匹配的URL路径段,例如/ song /:songid。因此,使用使用该名称和URL的路由(例如/ song / 48586),然后req.params.songid ===“ 48586”。
2.req.body属性来自一个表单发布,其中表单数据(在正文内容中提交)已被解析为body标签的属性。