ExpressJS中的req.query和req.param是什么?

122

req.queryreq.param 在 Express 中的主要区别

  • 两者之间有什么不同之处
  • 何时使用以及在哪些情况下使用

假设客户端发送了一个 Android(键,值)对请求……应该使用哪一个?

[编辑]

假设 Android 发送了一个 POST 请求 - 意图是向客户端发送 (Key,Value) 并且服务器应该基于服务器中的值执行数据库查询并返回 JSON 响应。

请参考以下问题来了解我引用的程序:: 查询结果的简单 Express 程序


2
你是指 req.queryreq.param 吗? - arb
1
是的!……我已经修改了问题。 - user2582071
4个回答

169

req.query在解析查询字符串(query string)之后将返回一个JS对象。

/user?name=tom&age=55 - req.query将返回{name:"tom", age: "55"}

req.params将返回匹配路由的参数。如果您的路由是/user/:id并且您向/user/5发出请求,req.params将返回{id: "5"}

req.param是提取请求中参数的函数。所有这些都可以在这里找到。

更新

如果动词是POST并且您正在使用bodyParser,则应该能够使用req.body在函数中获取表单体(body)。 这将是POST表单的解析JS版本。


谢谢,那么假设客户端在请求中发送了Android (Key,value)对……在Express中该使用哪个? - user2582071
没有办法回答这个问题,除非看到具体的请求。 - arb
请查看更新的问题......我在我发布的一个问题中也提到了我在Express中使用的程序链接.....请添加反馈! - user2582071
@Iplay 如果这个答案对你有帮助,请考虑将其标记为此问题的答案。谢谢。 - arb

24

req.query是发送到服务器的查询字符串,例如/page?test=1req.param是传递给处理程序的参数。

app.get('/user/:id', handler);,访问/user/blahreq.param.id将返回blah


谢谢,那么假设客户端在请求中发送了Android(键,值)对……应该使用哪一个? - user2582071
1
我不知道你在说什么,如果这是一个POST请求,它将会在req.data中,如果是GET请求,它将会在req.param中。 - OneOfOne
@AnandRaj 如果是空的,那么它就是空的,请检查 c.Param("id") == "" - OneOfOne
@OneOfOne,谢谢您的回复。让我检查一下,稍后会更新给您。 - Arj 1411
抱歉,这里的“c”是什么?是req.params吗? - Arj 1411
显示剩余2条评论

18

我建议使用以下内容

req.param('<param_name>')

req.param("") 的工作原理如下:

查找顺序如下:

req.params
req.body
req.query

为了清晰明了起见,应优先使用对req.body、req.params和req.query的直接访问——除非您确实接受每个对象的输入。

参考:http://expressjs.com/4x/api.html#req.param


1
嗨,你能告诉我如何检查 req.params 是否为 undefined 吗? - Arj 1411
@AnandRaj 你所说的undefined是什么意思?是指参数未知吗? - Abhijit Gaikwad
我的意思是,当我检查req.params的类型时,它显示为未定义。我的目标是检查req.params.<任何URI参数>是否为空。 - Arj 1411
@AnandRaj,你能否请发一下你的代码?以下代码对我有效。 var express = require('express'); var app = express();app.get('/', function(req, res){ console.log(req.params); res.send(req.params); });app.listen(3000); - Abhijit Gaikwad
@AnandRaj 尝试一下 if(reqParams.hasOwnProperty('deviceType')){} - Abhijit Gaikwad

13

传递参数

GET request to "/cars/honda" 
返回一个本田汽车型号列表。
传递查询。
GET request to "/car/honda?color=blue"
返回结果:返回一份本田汽车型号列表,但仅返回具有蓝色存货的型号。

将这些筛选器添加到URL参数 (/car/honda/color/blue) 中是没有意义的,因为根据REST的规定,那会意味着我们想获取关于颜色"blue"的大量信息。由于我们真正想要的是经过筛选的本田车型列表,所以我们使用查询字符串来筛选返回的结果。

请注意,查询字符串实际上只是稍微不同格式的 { key: value } 对:?key1=value1&key2=value2&key3=value3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接