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

标签 javascript express axios

我正在尝试创建一个简单的 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/

相关文章:

node.js - typescript 重载函数

mysql - NodeJS 到 Postman 结果

node.js - 如何将 Passport.js 和 Node 用于单页应用程序

javascript - React Native FlatList 错误 -- "Possible Unhandled Promise Rejection (id: 0): undefined is not an object"

javascript - 如何使用多个请求创建 Promise.all

javascript - 如何缓存 jQuery 选择?

javascript - Angular 范围不具有约束力

javascript - 对齐初始化代码有什么问题?

javascript - Jquery 获取系列中最后一个元素中表的最后一行

python - 属性错误: 'NoneType' object has no attribute 'save'