express 中的高级可选路由 预期结果:req.query 返回一个与我想要的完全一样的输入对象

问题描述

我正在尝试使用 express 和 node.js 构建 crud 应用程序

示例查询字符串

/table/?id=78&title=someTitle&code=3

其中 ID、标题代码是可选的。意思:

  • 如果没有输入,则返回所有行。
  • 如果输入了 id,则返回具有该 ID 的行。
  • 如果输入了代码标题,则根据输入过滤行。
  • ...

但是问题是我必须输入带有空值的整个 url 字符串,或者这些值混合在一起,或者 express 无法识别我的正则表达式模式(模式根据 {{3 }} 网站)

我试过了:

  1. https://regexr.com

    路线:

    /table/\??(id=)?:id?\&?(title=)?:title?\&?(code=)?:code?
    

    路径:

    /table/?id=78&title=someTitle&code=3
    

    结果:

    https://forbeslindesay.github.io/express-route-tester/

  2. 创建了我自己的正则表达式:

    Image About express routing result on express-route-tester
website

    \/table\/\??(id=78)?\&?(title=someTitle)?\&?(code=3)?
    

    除非我添加可选的 express 参数,否则这将起作用。

预期结果:

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 返回一个与我想要的完全一样的输入对象

路径

/table/?id=78&title=someTitle

请求.查询

{ id: '78',title: 'someTitle' }