快速路由参数与HTTP查询参数 [英] Express route parameters vs HTTP query parameters

查看:28
本文介绍了快速路由参数与HTTP查询参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在想下面是什么符号

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆