我正在尝试制作一个简单的API,该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是什么,那么它可以帮助我解决问题)
理想情况下,这是我想要实现的流程。出问题了,但我不太确定错误在哪里。
->例如,使用查询“ science”向我的api请求
->通过我的API,Axios发出GET请求以: https://myurl.com/blah/blah?tag=science
->我从GET请求中得到了带有JSON的响应
->我的API显示JSON文件
答案 0 :(得分:2)
查看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 }
]
答案 1 :(得分:-1)
Axios的获取功能如下所示
axios.get(url[, config])
因此,如果您使用axios.get(url, jsonParam)
,它将仅请求您的网址,而忽略您的jsonParam。
您需要将查询参数连接到您的网址
const url = `https://myurl.com/blah/blah?tag${tag}`
然后使用
axios.get(url)