快速路由参数与HTTP查询参数

时间:2020-08-01 12:27:24

标签: express parameters routes optional-parameters

我一直想知道下面是什么符号,

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路由约定来处理路由参数,我需要所有路由参数都是可选的。

如何处理?

1 个答案:

答案 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,但是一旦在相应的对象中对它们进行了解析,您应该知道如何处理它们。

希望我能理解这个问题并加以澄清。