Javascript 是否将查询参数附加到GET请求?

Javascript 是否将查询参数附加到GET请求?,javascript,express,axios,Javascript,Express,Axios,我正在尝试制作一个简单的API,它调用另一个API来返回一些信息。问题是,为了连接到第二个API,我需要将查询参数附加到它 因此,到目前为止,我尝试使用axios.get来获取API。如果我不需要在此基础上添加查询,那么这将非常简单,但我很难找到如何在请求的基础上附加查询 app.get('/api/posts', async (req, res) => { try { const url = 'https://myurl.com/blah/blah';

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

因此,到目前为止,我尝试使用axios.get来获取API。如果我不需要在此基础上添加查询,那么这将非常简单,但我很难找到如何在请求的基础上附加查询

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.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与params相处的URL没有对齐。(有没有办法检查Axios请求的去向?如果我能看到Axios发出的实际url,那么它可以帮助我解决问题)

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

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

->Axios通过我的API发出GET请求:

->我从get请求中得到一个带有JSON的响应

->我的API在查看Axios'后显示JSON文件

,看起来第二个参数需要key
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);
    }
});
如果上述方法不起作用,您可以研究

回复您的评论,是的,您可以组合多个Axios回复。例如,如果我希望对象文本是我的
响应.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 }
]

为什么要这样使用字符串插值:
{tag:`${tag}}
,而您可以只执行
{tag:tag}
,甚至只执行
{tag}
?您可能更幸运地将objParam(未字符串化)作为第二个参数。或者您可能希望尝试使用qs中的stringify方法,而不是使用JSON中的方法。我发现这两种方法都有帮助axios@kshetline我只是不确定没有引号的对象的值是否有效。我得到一个类型错误:“将循环结构转换为JSON”。我以前尝试过在选项上使用JSON.stringify(),但仍然出现相同的错误。您可以通过执行
res.JSON(response.data)
来绕过此错误。您可以查看是否需要响应的其他部分。嘿,response.data成功了!非常感谢你。你认为你能解释这是如何/为什么起作用的吗?“将循环结构转换为JSON”是什么意思?您可以通过
data
键从成功的Axios响应接收数据。这适用于所有返回数据的方法。不幸的是,我不太了解循环结构错误,但我相信Express很可能在
res.JSON
的后台使用
JSON.stringify
。正如本文所引用的,
JSON.stringify
无法序列化包含循环引用的JavaScript结构。我更新了我的帖子来回答您的问题。在这里回答,是的,您可以使用Axios的
response.data
作为JS普通对象,并在需要时将它们组合起来。如果需要多个Axios调用,还可以考虑使用<代码> AXIOS.AL()< <代码> > <代码> AXIOS.Script()/<代码>。