nodejs(express)是否可以使用不区分大小写的查询字符串?

Ami*_*ava 11 node.js express

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

如果我的网址有?Id=10,则访问req.query.id返回undefined.

rob*_*lep 26

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

// insert this before your routes
app.use(function(req, res, next) {
  for (var key in req.query)
  { 
    req.query[key.toLowerCase()] = req.query[key];
  }
  next();
});
Run Code Online (Sandbox Code Playgroud)

  • 如果用户键入具有混合大小写的查询参数,该怎么办?:) (2认同)

Jør*_*ode 6

使用Robert提出的解决方案,请注意,每当您阅读req.query,都需要使用小写字母的键。这样一来,将来就容易添加API错误。

这是另一种中间件,它使用Proxy对象修改的行为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();
});
Run Code Online (Sandbox Code Playgroud)

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