Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs(express)是否可以使用不区分大小写的querystring?_Node.js_Express - Fatal编程技术网

Node.js nodejs(express)是否可以使用不区分大小写的querystring?

Node.js nodejs(express)是否可以使用不区分大小写的querystring?,node.js,express,Node.js,Express,querystring似乎区分大小写。是否可以使用不区分大小写的查询字符串 如果我的url有?Id=10,访问req.query.Id返回未定义的这是不可能的,但您可以插入一个非常简单的中间件,例如,将req.query中的所有键小写: 使用Robert提出的解决方案,请注意,无论何时读取req.query,都需要使用小写键。这使得将来添加到API中时容易出错 下面是另一个中间件,它使用a来修改req.query[…]的行为,以便查找不区分大小写: app.use((req, res, nex

querystring似乎区分大小写。是否可以使用不区分大小写的查询字符串


如果我的url有
?Id=10
,访问
req.query.Id
返回
未定义的

这是不可能的,但您可以插入一个非常简单的中间件,例如,将
req.query
中的所有键小写:


使用Robert提出的解决方案,请注意,无论何时读取
req.query
,都需要使用小写键。这使得将来添加到API中时容易出错

下面是另一个中间件,它使用a来修改
req.query[…]
的行为,以便查找不区分大小写:

app.use((req, res, next) => {
  req.query = new Proxy(req.query, {
    get: (target, name) => target[Object.keys(target)
      .find(key => key.toLowerCase() === name.toLowerCase())]
  })

  next();
});

除了不易出错之外,这种方法还保留了
req.query
完整的枚举操作,原始解决方案可能会创建重复的键/值对。

谢谢!来自IIS,这种基本需求被忽略的感觉很奇怪。如果用户使用混合案例键入查询参数会怎么样?:)对我可能会去
example.com?bookid=1
,服务器希望在这里使用
?bookid=1
,这是非常常见的场景。如果这是您的常见场景(不是我的),我完全理解您对访问这些参数的不区分大小写方式的要求:)@robertklep,如果我没有错的话,我们将得到双倍的财产。。右请记住在最后一个条件下返回
target[name]
,否则query.toString()等对象方法将抛出错误。
app.use((req, res, next) => {
  req.query = new Proxy(req.query, {
    get: (target, name) => target[Object.keys(target)
      .find(key => key.toLowerCase() === name.toLowerCase())]
  })

  next();
});