我正在尝试创建一个简单的 API,它调用另一个将返回一些信息的 API。问题是,为了连接到第二个 API,我需要向其附加查询参数。
到目前为止,我尝试做的是使用 axios.get 来获取 API。如果我不需要在此基础上添加查询,那么这将非常简单,但我很难弄清楚如何在我的请求之上附加查询。
我创建了一个对象,该对象从我的末端提取原始查询,然后使用 JSON.stringify 将我创建的对象转换为 JSON。然后,根据我对 Axios 的理解,您可以附加参数,用逗号分隔 URL。
在第 6 行,我不确定变量是否会继续存在,但我绝对不能将标签 var 转换为字符串“tag”,所以这就是为什么我将其保留为大括号和反勾号。如果这是错误的,那么请纠正我如何正确地做到这一点。
var 标签是我从末尾提取的查询的名称。该标签是需要传输到 Axios GET 请求的内容。
app.get('/api/posts', async (req, res) => {
try {
const url = 'https://myurl.com/blah/blah';
let tag = req.query.tag;
objParam = {
tag: `${tag}`
};
jsonParam = JSON.stringify(objParam);
let response = await axios.get(url, jsonParam);
res.json(response);
} catch (err) {
res.send(err);
}
});
响应应该等于我向其发出请求的 JSON 文件。
我实际上得到的是错误 400,这让我觉得不知何故,Axios 处理的 URL 与参数没有对齐。 (有没有办法检查 Axios 请求的去向?如果我也能看到 axios 发出的实际 url,那么它可以帮助我解决我的问题)
理想情况下,这就是我想要实现的流程。有问题,但我不太确定错误在哪里。
-> 我向 MY api 发出请求,例如使用查询“science”
-> 通过我的 API,Axios 向以下位置发出 GET 请求: https://myurl.com/blah/blah?tag=science
-> 我收到来自 GET 请求的 JSON 响应
-> 我的 API 显示 JSON 文件
最佳答案
查看 Axios 的 README 后,看起来第二个参数需要键 params
。您可以尝试:
app.get('/api/posts', async (req, res, next) => {
try {
const url = 'https://myurl.com/blah/blah';
const options = {
params: { tag: req.query.tag }
};
const response = await axios.get(url, options);
res.json(response.data);
} catch (err) {
// Be sure to call next() if you aren't handling the error.
next(err);
}
});
如果以上方法不行,您可以查看query-string
.
const querystring = require('query-string');
app.get('/api/posts', async (req, res, next) => {
try {
const url = 'https://myurl.com/blah/blah?' +
querystring.stringify({ tag: req.params.tag });
const response = await axios.get(url);
res.json(response.data);
} catch (err) {
next(err);
}
});
回复您的评论,是的,您可以合并多个 Axios 回复。例如,如果我期望一个对象文字作为我的 response.data
,我可以这样做:
const response1 = await axios.get(url1)
const response2 = await axios.get(url2)
const response3 = await axios.get(url3)
const combined = [
{ ...response1.data },
{ ...response2.data },
{ ...response3.data }
]
关于javascript - 将查询参数附加到 GET 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57130108/