查询字符串似乎区分大小写。是否可以使用不区分大小写的查询字符串?
如果我的网址为?Id=10
,则访问req.query.id
会返回undefined
。
答案 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
保持完整的枚举操作,原始解决方案可能会创建重复的键/值对。