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

xpt*_*xpt 3 parameters routes optional-parameters express

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

GET /user/:name/books/:title

以及如何解释它,直到最近,当我了解到它们是 Express 路线的形式,并且带有的":"是 Express 路线参数时。

所以这是我找不到答案的问题,比如说,

问题是,如果大多数甚至所有参数都是可选的怎么办?Express路线如何处理?

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

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

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

我确实了解到 Express 可以处理querystring.parse(parsedUrl.query),但我问这个问题的原因确实是因为这个 - https://github.com/go Fiber /docs/blob/master/original/routing.md#parameters

即,go Fiber 遵循/使用 Express 路由约定来处理路由参数,并且我需要所有路由参数都是可选的。

该怎么处理呢?

Fed*_*eSc 5

您在 URL 中发送的每个变量:都会通过以下方式接收req.params

\n
\n

此属性是一个对象,其中包含映射到命名路由 \xe2\x80\x9cparameters\xe2\x80\x9d 的属性。例如,如果您有路由 /user/:name,则 \xe2\x80\x9cname\xe2\x80\x9d 属性可用作 req.params.name。该对象默认为 {}。

\n
\n
// will be available in route in req.params object\nrouter.get(\'/somepath/with/:variable\', (req ,res) => {\n  console.log(req.params.variable);\n});\n
Run Code Online (Sandbox Code Playgroud)\n

您在 URL 中发送的每个变量?(查询参数)都将在以下位置可用req.query

\n
\n

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

\n
\n
// will be available in route in req.query object\nrouter.get(\'/somepath/with/variables?page=2&limit=3&sort=price\', (req ,res) => {\n  console.log(req.query.page);\n  console.log(req.query.limit);\n  console.log(req.query.sort);\n});\n
Run Code Online (Sandbox Code Playgroud)\n

您通过 ajax 或表单或类似方式发送的每个数据都将被接收req.body

\n
\n

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

\n
\n
// will be available in route in req.body object\nrouter.get(\'/somepath/with/variables\', (req ,res) => {\n  // send in request body like for example form data:\n  console.log(req.body.variable1) // i.e\n});\n
Run Code Online (Sandbox Code Playgroud)\n

这是以三种不同方式收集数据的三个对象。\n您应该选择适合您场景的方式。我想 Route params 不是正确的选择,req.query当变量随机到达时你应该使用它,但是一旦你在相应的对象中解析了它们,你应该知道如何处理它们。

\n

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

\n