nodejs(express)是否可以有不区分大小写的查询string?
似乎查询string是区分大小写的。 是否有可能有一个不区分大小写的查询string?
如果我的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提出的解决scheme,请注意,无论何时从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
完整地枚举操作,原始解决scheme可能会创build重复的键/值对。