代码之家  ›  专栏  ›  技术社区  ›  leed38

axios:如何将查询参数附加到get请求?

  •  1
  • leed38  · 技术社区  · 5 年前

    我正在尝试创建一个简单的api,它调用另一个api来返回一些信息。问题是,为了连接到第二个api,我需要将查询参数附加到它。

    所以到目前为止,我试图使用axios.get来获取api。如果我不需要在上面添加查询,那么这将非常简单,但是我很难找出如何在我的请求上面附加查询。

    我创建了一个对象,该对象从我的末尾提取原始查询,然后使用json.stringify将我生成的对象转换为json。然后,根据我对axios的理解,可以附加params my,用逗号分隔url。

    在第6行,我不确定变量是否会继续,但我绝对不能让tag变量变成字符串“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和params相处的url没有排成一行。(是否有方法检查axios请求的目的地?如果我能看到Axios启动的实际URL,那么它可以帮助我解决问题)

    理想情况下,这是我想要实现的流程。它有问题,但我不太确定错误在哪里。

    ->我向我的api发出请求,例如使用查询“science”

    ->通过我的api,axios发出get请求: https://myurl.com/blah/blah?tag=science

    ->我从get请求中得到一个json响应

    ->My API显示JSON文件

    2 回复  |  直到 5 年前
        1
  •  2
  •   khan    5 年前

    看了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 }
    ]