14

似乎查询字符串区分大小写。是否可以有不区分大小写的查询字符串?

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

4

2 回答 2

27

这是不可能的,但您可以插入一个非常简单的中间件,例如,将所有键小写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();
});
于 2013-03-20T13:24:14.613 回答
13

使用 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();
});

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

于 2017-09-04T11:18:22.317 回答