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

时间:2013-03-20 11:11:16

标签: node.js express

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

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

2 个答案:

答案 0 :(得分:24)

这不可能原样,但你可以插入一个非常简单的中间件,例如,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();
});

答案 1 :(得分:6)

使用Robert提出的解决方案,请注意,无论何时req.query读取,您都需要使用小写密钥。这会使您未来的API添加容易出错。

这是一个替代的中间件,使用Proxy object来修改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保持完整的枚举操作,原始解决方案可能会创建重复的键/值对。