我一直想知道下面是什么符号,
GET /user/:name/books/:title
以及如何解释它,直到最近我才知道它们采用Express路由的形式,而带有":"
的是Express路由参数。
所以这里出现了一个问题,我没有找到答案,例如
问题是,如果大多数甚至所有参数都是可选的怎么办?如何使用Express路线处理该问题?
问题在于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路由约定来处理路由参数,我需要所有路由参数都是可选的。
如何处理?
答案 0 :(得分:1)
使用req.params
接收通过:
在URL中发送的每个变量
此属性是一个对象,其中包含映射到命名路由“参数”的属性。例如,如果您具有路由/ 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
包含在请求正文中提交的键/值数据对。默认情况下,它是未定义的,并且在使用主体解析中间件(例如express.json()或express.urlencoded())时填充。
// 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
,但是一旦在相应的对象中对它们进行了解析,您应该知道如何处理它们。
希望我能理解这个问题并加以澄清。