node.js - 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
然后添加这个或者一个或另一个的组合或两者
解决方案
如果在 if 或 else 子句中设置变量,它们必须是变量,而不是const
s。而且,它们需要在 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 答案的范围。
推荐阅读
- visual-studio - 如何在构建应用程序时向我的项目添加新页面而不会出现错误“初始化组件不存在”?
- php - 你如何在wordpress中为客户制作“背景:url(”“)(CSS)一个可定制的图像
- java - 如何从 GridView 中的选定项目中获取数据?
- ios - 将 Dlib 添加到我的 Xcode 项目但没有找到 .h 文件
- swift - 使用 Swift 编辑按钮的困难
- javascript - 如何将参数从锚标记 onclick 传递到 document.ready 中的函数
- javascript - Javascript继承 - 询问专家对以下代码的意见
- c++ - 如何在 C++ 中将“\320\272\320\276\320\274...”之类的文本转换为 std::wstring?
- android - 如何在自定义对话框中获取卡片视图的 ID
- java - BroadcastReceiver 没有像我预期的那样工作