Node.js:req.query []和req.params之间的区别

102 node.js query-string

通过req.query [myParam]和req.params.myParam获取QUERY_STRING参数之间有区别吗?如果是的话,我什么时候应该使用哪个?

谢谢.

ruf*_*rey 221

鉴于这条路线

app.get('/hi/:param1', function(req,res){} );
Run Code Online (Sandbox Code Playgroud)

并给出此URL http://www.google.com/hi/there?qs1=you&qs2=tube

你将会有:

REQ.询问

{
  qs1: 'you',
  qs2: 'tube'
}
Run Code Online (Sandbox Code Playgroud)

REQ.PARAMS

{
  param1: 'there'
}
Run Code Online (Sandbox Code Playgroud)

Express req.params >>

  • 看看req.url或req.originalUrl或req._originalUrl,然后在`/`上拆分 (2认同)
  • 这应该就是答案,干净、清晰、容易理解, (2认同)

Joh*_*yHK 112

req.params包含路由参数(在URL的路径部分中),并req.query包含URL查询参数(在?URL之后).

您还可以使用req.param(name)在两个位置(以及req.body)查找参数,但现在不推荐使用此方法.

  • 为什么要弃用它?如果我们使用params或查询然后决定将其更改为另一个怎么办? (3认同)
  • `req.param`现已弃用.Node建议使用`req.query`或`req.params` (2认同)

Dee*_*rma 11

假设您已经这样定义了路由名称:

https://localhost:3000/user/:userid
Run Code Online (Sandbox Code Playgroud)

它将变成:

https://localhost:3000/user/5896544
Run Code Online (Sandbox Code Playgroud)

在这里,如果您要打印: request.params

{
userId : 5896544
}
Run Code Online (Sandbox Code Playgroud)

所以

request.params.userId = 5896544
Run Code Online (Sandbox Code Playgroud)

因此request.params是一个对象,其中包含命名路由的属性

request.query来自URL中的查询参数,例如:

https://localhost:3000/user?userId=5896544 

Run Code Online (Sandbox Code Playgroud)

request.query

{

userId: 5896544

}
Run Code Online (Sandbox Code Playgroud)

所以

request.query.userId = 5896544

Run Code Online (Sandbox Code Playgroud)

  • 很好的解释 (2认同)

Ani*_*ngh 7

您现在应该能够使用点表示法访问查询.

如果您想访问,说您正在接收GET请求,/checkEmail?type=email&utm_source=xxxx&email=xxxxx&utm_campaign=XX并且您想要获取所使用的查询.

var type = req.query.type,
    email = req.query.email,
    utm = {
     source: req.query.utm_source,
     campaign: req.query.utm_campaign
    };
Run Code Online (Sandbox Code Playgroud)

PARAMS被用于自定义的参数,用于接收请求,像(例如):

router.get('/:userID/food/edit/:foodID', function(req, res){
 //sample GET request at '/xavg234/food/edit/jb3552'

 var userToFind = req.params.userID;//gets xavg234
 var foodToSearch = req.params.foodID;//gets jb3552
 User.findOne({'userid':userToFind}) //dummy code
     .then(function(user){...})
     .catch(function(err){console.log(err)});
});
Run Code Online (Sandbox Code Playgroud)