重复参数通过 node.js express 或 vue 路由器获取数组
Posted
技术标签:
【中文标题】重复参数通过 node.js express 或 vue 路由器获取数组【英文标题】:duplicate params get array by node.js express or vue router 【发布时间】:2020-09-15 20:50:17 【问题描述】:我有一个大问题。
在我完成的所有其他项目中,我使用了 apache 或 nginx 和 php。 如果我有一个像 /test?param=1¶m=2 这样的 Url,则 $_REUEST['param'] 的值为 2。
但在 Node.js (Express) 中,我得到一个数组 [1,2]
我可以使用new URLSearchParams(this.$route.fullPath)
而不是.get()
或.getAll()
方法只获得一个值。但是我们有一个很大的项目,在几个文件中有很多循环和 this.$route.query 的用法。
是否可以在一个地方过滤 this.$route.query ? 还是 express 能够像 apache/nginx 这样改变这个参数的返回?
【问题讨论】:
您检查过req.params
对象吗?它应该以对象格式为您提供参数
@SyedFaizan:req.params 包含路径参数,而不是查询参数...
对不起,我的意思是req.query
,感谢您指出@eol
【参考方案1】:
这确实是express底层解析器works this way的问题。作为一种解决方法,您可以编写一个小助手来提取所需的值,以防查询参数是一个数组。比如:
function getQueryParam(req, queryParam)
if (!req.query)
return undefined;
if (Array.isArray(req.query[queryParam]))
const paramArray = req.query[queryParam];
return paramArray[paramArray.length - 1]; // always return the last provided value
return req.query[queryParam];
你可以这样使用它:
app.get('/', (req, res) =>
const paramValue = getQueryParam(req, "param");
// do something with paramValue
);
【讨论】:
【参考方案2】:app.use((req, res, next) =>
if (req.query)
const oldQuery = JSON.stringify(req.query);
const queryStrings = [];
Object.keys(req.query).forEach((paramKey) =>
if (Array.isArray(req.query[paramKey]))
const paramArray = req.query[paramKey];
req.query[paramKey] = paramArray[paramArray.length - 1]; // always return the last provided value
queryStrings.push(`$paramKey=$req.query[paramKey]`);
);
const newQuery = JSON.stringify(req.query);
if (oldQuery !== newQuery)
res.redirect(301, `$req.path?$queryStrings.join('&')`);
next();
);
这通过重定向起作用。不是我想要的完美的东西,但结果是一样的
【讨论】:
以上是关于重复参数通过 node.js express 或 vue 路由器获取数组的主要内容,如果未能解决你的问题,请参考以下文章