重复参数通过 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 或 nginxphp。 如果我有一个像 /test?param=1&param=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 路由器获取数组的主要内容,如果未能解决你的问题,请参考以下文章

Node.js-express框架-cookie设置参数详解和举例

Node.js Express 框架

Node.js Express 框架

Node JS:一直在运行服务器[重复]

Node.js:Express 框架

mongoose、express 和 node.js 中回调函数的参数