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

Express 快速路由参数与HTTP查询参数,express,parameters,routes,optional-parameters,Express,Parameters,Routes,Optional Parameters,我一直在想下面是什么符号 GET/user/:name/books/:title 直到最近,我才知道它们是以快速路线的形式出现的,带有“:”的是快速路线参数 这就是我没有找到答案的问题,比如 问题是,如果大多数甚至所有参数都是可选的怎么办?用快线怎么办 问题是,对于HTTP查询参数,例如 https://example.org/?page=2&limit=3&sort=price 查询参数的顺序可以是任意的,而对于Express route,在我看来,必须以非常严格的方式/顺序指定路由参

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

GET/user/:name/books/:title

直到最近,我才知道它们是以快速路线的形式出现的,带有
“:”
的是快速路线参数

这就是我没有找到答案的问题,比如

问题是,如果大多数甚至所有参数都是可选的怎么办?用快线怎么办

问题是,对于HTTP查询参数,例如

https://example.org/?page=2&limit=3&sort=price

查询参数的顺序可以是任意的,而对于Express route,在我看来,必须以非常严格的方式/顺序指定路由参数。那么,如果所有路由参数都是可选的,而我只需要指定最后一个呢?(无论您如何安排路线参数订单,都会有最后一个)

我确实了解到Express可以处理
querystring.parse(parsedUrl.query)
,但我问这个问题的原因实际上是因为--

也就是说,gofiber遵循/使用快速路由约定来处理路由参数,我需要所有路由参数都是可选的


如何处理这个问题?

您在URL中发送的每个变量都会随一起接收

此属性是包含映射到命名管线“参数”的属性的对象。例如,如果您有route/user/:name,则“name”属性可用作req.params.name。此对象默认为{}

//将在req.params对象中的路由中可用
router.get('/somepath/with/:variable',(req,res)=>{
控制台日志(请求参数变量);
});

(查询参数)之后在URL中发送的每个变量都将在中可用

此属性是一个对象,包含路由中每个查询字符串参数的属性。当查询解析器设置为禁用时,它是一个空对象{},否则它是已配置查询解析器的结果

//将在req.query对象中的路由中可用
router.get('/somepath/with/variables?page=2&limit=3&sort=price',(req,res)=>{
控制台日志(请求查询页面);
控制台日志(请求查询限制);
日志(请求查询排序);
});
通过ajax、表单或类似的东西发送的每个数据都将被接收

包含请求正文中提交的数据的键值对。默认情况下,它是未定义的,并且在使用主体解析中间件(如express.json()或express.urlencoded()时填充

//将在req.body对象中的路由中可用
get('/somepath/with/variables',(req,res)=>{
//发送请求正文,例如表单数据:
console.log(req.body.variable1)//即
});
这三个对象以三种不同的方式收集数据。 你应该选择适合你的场景。我想Route params不是正确的选项,当变量随机到达时,您应该使用
req.query
,但在相应的对象中解析它们之后,您应该知道如何处理它们

我希望我理解了这个问题并进行了澄清。

“我想Route params不是正确的选项,当变量随机到达时,您应该使用req.query”因此Route params确实不是适合我的选项。感谢您的确认和详细解释!