快速路由参数与HTTP查询参数 [英] Express route parameters vs HTTP query parameters
问题描述
我一直在想下面是什么符号
GET /user/:name/books/:title
以及如何解释,直到最近才知道它们是Express Route的形式,":"
是Express路由参数。
这就是我没有找到答案的问题,比方说
问题是,如果大多数甚至所有参数都是可选的,该怎么办?如何使用Express Route处理此问题?问题在于,对于HTTP查询参数,如
https://example.org/?page=2&limit=3&sort=price
查询参数的顺序可以是任意的,而在我看来,对于Express route,路由参数必须以非常严格的方式/顺序指定。那么,如果所有路由参数都是可选的,而我只需要指定最后一个参数,那该怎么办呢?(无论您如何安排工艺路线参数订单,总会有最后一个)
我确实了解到Express可以处理querystring.parse(parsedUrl.query)
,但是我问这个问题的真正原因是--https://github.com/gofiber/docs/blob/master/original/routing.md#parameters
即,goFiber遵循/使用Express路由约定来处理路由参数,并且我需要所有路由参数都是可选的。
如何处理?
url
您使用:
在推荐答案中发送的每个变量都会通过req.params
此属性是一个对象,其中包含映射到命名路由"Parameters"的属性。例如,如果您有route/user/:name,那么"name"属性就是req.params.name。此对象默认为{}。
// will be available in route in req.params object
router.get('/somepath/with/:variable', (req ,res) => {
console.log(req.params.variable);
});
您在?
(查询参数)之后在URL中发送的每个变量都将在req.query
此属性是包含路由中每个查询字符串参数的属性的对象。当查询解析器设置为禁用时,它是空对象{},否则它是配置的查询解析器的结果。
// will be available in route in req.query object
router.get('/somepath/with/variables?page=2&limit=3&sort=price', (req ,res) => {
console.log(req.query.page);
console.log(req.query.limit);
console.log(req.query.sort);
});
您通过AJAX或表单等方式发送的每个数据都会收到req.body
包含在请求正文中提交的数据的键值对。默认情况下,它是未定义的,当您使用正文解析中间件(如expression s.json()或expression s.urlencode())时,会填充它。
// will be available in route in req.body object
router.get('/somepath/with/variables', (req ,res) => {
// send in request body like for example form data:
console.log(req.body.variable1) // i.e
});
这是三个对象,它们以三种不同的方式收集数据。
你只需要选择适合你的环境就行了。我猜Route params不是正确的选项,当变量随机到达时,您应该使用req.query
,但是一旦您在相应的对象中解析了它们,您应该知道如何处理它们。
我希望我理解了问题并澄清了。
这篇关于快速路由参数与HTTP查询参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!