我有大问题。
在我完成的所有其他项目上,我都使用apache或Nginx和PHP。如果我有一个类似/ test?param = 1&param = 2的网址,则$ _REUEST ['param']的值为2。
但是在Node.js(Express)中,我得到了一个数组[1,2]
我可以使用new URLSearchParams(this.$route.fullPath)
,然后使用方法.get()
或.getAll()
仅获得一个值。但是我们有一个很大的项目,在几个文件中都有this。$ route.query的许多循环和用法。
是否可以在一个地方过滤this。$ route.query?还是表示能够更改此参数的返回值(例如apache / nginx)?
作为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
});
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();
});
这通过重定向起作用。不是我想要的完美事物,但结果相同