首页 > 解决方案 > NodeJS/Express 使用多个 req.query.params 构建 URL

问题描述

我有一个小型 express API 应用程序,它调用外部 API。我正在尝试根据传入我的 API 的查询参数为外部 API 构建 URL。我尝试使用 if/else 块,但 const 仅在该块中可用。

这是我到目前为止所拥有的:

const baseUrl = https://externalapi.com/api&apikey=<APIKEY>;
const response = await axios.get(url);

所以我希望能够根据传入的参数将查询参数添加到baseUrl基础上,所以如果用户有一个参数param1然后添加这个来baseUrl制作url,但是如果他们指定param2然后添加这个或者一个或另一个的组合或两者

标签: node.jsexpress

解决方案


如果在 if 或 else 子句中设置变量,它们必须是变量,而不是consts。而且,它们需要在 if / else 子句之外声明。

let foo
if (a) foo = 'a'
else foo = 'b'

您的应用程序可能会使用节点的 URL 类

const targetUrl = new URL('https://externalapi.com/api')
targetUrl.searchParams.append('apikey', '<<SECRET API KEY>>') //SECURITY PROBLEM!

if (a) targetUrl.searchParams.append('objecttype', 'a')
else targetUrl.searchParams.append('objecttype', 'b')

您可以使用该类的.searchParams属性URL来组装您的查询。

安全提示:您可能应该使用 POST 而不是 GET 来调用此 API,并将您的敏感参数(如您的秘密 API 密钥)放入 POST 参数中。URL 上的参数存储在 Web 服务器日志中。它们可能存储在不受您或您的外部 api 提供者控制的代理服务器日志中。解释如何重构代码来做到这一点超出了这个 SO 答案的范围。


推荐阅读