Node.js nodejs(express)是否可以使用不区分大小写的querystring?
querystring似乎区分大小写。是否可以使用不区分大小写的查询字符串Node.js nodejs(express)是否可以使用不区分大小写的querystring?,node.js,express,Node.js,Express,querystring似乎区分大小写。是否可以使用不区分大小写的查询字符串 如果我的url有?Id=10,访问req.query.Id返回未定义的这是不可能的,但您可以插入一个非常简单的中间件,例如,将req.query中的所有键小写: 使用Robert提出的解决方案,请注意,无论何时读取req.query,都需要使用小写键。这使得将来添加到API中时容易出错 下面是另一个中间件,它使用a来修改req.query[…]的行为,以便查找不区分大小写: app.use((req, res, nex
如果我的url有
?Id=10
,访问req.query.Id
返回未定义的这是不可能的,但您可以插入一个非常简单的中间件,例如,将req.query
中的所有键小写:
使用Robert提出的解决方案,请注意,无论何时读取req.query
,都需要使用小写键。这使得将来添加到API中时容易出错
下面是另一个中间件,它使用a来修改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
完整的枚举操作,原始解决方案可能会创建重复的键/值对。谢谢!来自IIS,这种基本需求被忽略的感觉很奇怪。如果用户使用混合案例键入查询参数会怎么样?:)对我可能会去example.com?bookid=1
,服务器希望在这里使用?bookid=1
,这是非常常见的场景。如果这是您的常见场景(不是我的),我完全理解您对访问这些参数的不区分大小写方式的要求:)@robertklep,如果我没有错的话,我们将得到双倍的财产。。右请记住在最后一个条件下返回target[name]
,否则query.toString()等对象方法将抛出错误。
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();
});