将查询参数附加到GET请求吗?

时间:2019-07-21 03:27:09

标签: javascript express axios

我正在尝试制作一个简单的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文件

2 个答案:

答案 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)
相关问题