由node.js express或vue路由器获取重复的参数

问题描述 投票:2回答:2

我有大问题。

在我完成的所有其他项目上,我都使用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)?

node.js express vue.js vue-router query-parameters
2个回答
0
投票

作为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 
});

0
投票
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();
    });

这通过重定向起作用。不是我想要的完美事物,但结果相同

© www.soinside.com 2019 - 2024. All rights reserved.