express 中的高级可选路由
Advanced optional routing in express
我正在尝试使用 express 和 node.js
构建 crud 应用程序
示例查询字符串
/table/?id=78&title=someTitle&code=3
其中 ID、标题和代码是可选的。含义:
- 如果输入 none,则 return 所有行。
- 如果输入了 ID,return 具有该 ID 的行。
- 如果输入代码和标题,根据输入过滤行。
- ...
但是 问题 要么我必须输入带有空值的整个 url 字符串,要么这些值混合在一起,或者 express 无法识别我的正则表达式模式(模式根据 https://regexr.com 网站有效)
我试过:
-
路线:
/table/\??(id=)?:id?\&?(title=)?:title?\&?(code=)?:code?
路径:
/table/?id=78&title=someTitle&code=3
结果:
创建了我自己的正则表达式:
\/table\/\??(id=78)?\&?(title=someTitle)?\&?(code=3)?
除非我添加可选的快速参数,否则这将起作用。
预期结果:
Path
/table/?id=78
request.params
{ id: '78'}
----
Path
/table/?code=3
request.params
{ code: '3' }
----
Path
/table/?id=78&title=someTitle
request.params
{ id: '78', title: 'someTitle' }
PS:我知道我可以通过将正则表达式匹配到request.url来实现这个,但我想要想知道express有没有其他方法。
所以这是答案:
我可以通过使用 req.query
而不是 req.params
来实现
req.query returns 完全符合我想要的输入对象
路径
/table/?id=78&title=someTitle
request.query
{ id: '78', title: 'someTitle' }
我正在尝试使用 express 和 node.js
构建 crud 应用程序示例查询字符串
/table/?id=78&title=someTitle&code=3
其中 ID、标题和代码是可选的。含义:
- 如果输入 none,则 return 所有行。
- 如果输入了 ID,return 具有该 ID 的行。
- 如果输入代码和标题,根据输入过滤行。
- ...
但是 问题 要么我必须输入带有空值的整个 url 字符串,要么这些值混合在一起,或者 express 无法识别我的正则表达式模式(模式根据 https://regexr.com 网站有效)
我试过:
-
路线:
/table/\??(id=)?:id?\&?(title=)?:title?\&?(code=)?:code?
路径:
/table/?id=78&title=someTitle&code=3
结果:
创建了我自己的正则表达式:
\/table\/\??(id=78)?\&?(title=someTitle)?\&?(code=3)?
除非我添加可选的快速参数,否则这将起作用。
预期结果:
Path
/table/?id=78
request.params
{ id: '78'}
----
Path
/table/?code=3
request.params
{ code: '3' }
----
Path
/table/?id=78&title=someTitle
request.params
{ id: '78', title: 'someTitle' }
PS:我知道我可以通过将正则表达式匹配到request.url来实现这个,但我想要想知道express有没有其他方法。
所以这是答案:
我可以通过使用 req.query
而不是 req.params
req.query returns 完全符合我想要的输入对象
路径
/table/?id=78&title=someTitle
request.query
{ id: '78', title: 'someTitle' }