似乎查询字符串区分大小写。是否可以有不区分大小写的查询字符串?
如果我的 url 有?Id=10
,访问req.query.id
返回undefined
。
这是不可能的,但您可以插入一个非常简单的中间件,例如,将所有键小写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();
});
使用 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
保留了枚举操作的完整性,原始解决方案可能会创建重复的键/值对。