Javascript 以对象为参数的Axios获取请求(来自后端)

Javascript 以对象为参数的Axios获取请求(来自后端),javascript,node.js,rest,http,axios,Javascript,Node.js,Rest,Http,Axios,我在使用axios向该API发送请求时遇到了很多麻烦,该API以对象方式接受参数: GEThttps://api.osrsbox.com/items?where={“名称”:“深海鞭”,“重复”:false} 主要问题是axios会自动对字符串进行编码。在StackOverflow中寻找解决方案,我发现: const item=“深海鞭” 常量配置={ 参数化器:(参数)=>{ 返回querystring.stringify(params,{arrayFormat:'forests'}); }

我在使用
axios
向该API发送请求时遇到了很多麻烦,该API以对象方式接受参数:

GEThttps://api.osrsbox.com/items?where={“名称”:“深海鞭”,“重复”:false}

主要问题是
axios
会自动对字符串进行编码。在StackOverflow中寻找解决方案,我发现:


const item=“深海鞭”
常量配置={
参数化器:(参数)=>{
返回querystring.stringify(params,{arrayFormat:'forests'});
},
参数:{
其中:{
名称:项目,
重复:假
}
}
}
axios.get(“https://api.osrsbox.com/items,配置)。然后((resp)=>{
[...]
})
这将导致以下请求:

https://api.osrsbox.com/items?where=%7B%22name%22:%22Abyssal%20Whip%22,%22重复%22:false%7D

我想知道我做错了什么。提前谢谢


PS:我正在从Node.js环境/服务器发出请求。

这是API接受的一种非常奇怪的格式。但我想这是你必须处理的

在我看来,如果将代码的相关部分更改为:

where: JSON.stringify({
    name: item,
    duplicate: false
}) 

(我希望您的示例请求中的空格不是必需的,如果它们是必需的,那么这将不起作用)

您必须使用npm包“qs”

  • npm i qs

  • 创建一个包含所有请求主体参数的对象,例如-

  • const requestBody={

    }

  • 现在在发出Axios请求时-

    Axios.get(“https://api.osrsbox.com/items,qs.stringyfy(requestBody),config) .then(res=>console.log(res) .catch(err=>console.log(err))


  • 您好,您的建议是通过
    axios
    这样计算的:
    https://api.osrsbox.com/items?where=%7B%22name%22%3A%22Abyssal%20Whip%22%2C%22duplicate%22%3Afalse%7D
    。我同意你的看法,这是一个糟糕的API设计,但我无法控制它。哦,是的,会的,因为大括号和引号(等等)就是这样的是URL编码的。我假设你的API必须接受这种形式,因为GET请求是关于URL中的内容。你测试过请求是否有效吗?它不起作用…API不接受转义字符。API设计非常糟糕。嗯-在这种情况下,我不知道有人或任何人如何调用此API当然,最后一件事是调用-so
    where:decodeURI(JSON.stringify({…})
    。如果这样做有效,我将把它添加到答案中。你能提供requestBody的完整示例吗?我遇到一些错误:
    const requestBody={where:{name:item,duplicate:false}
    您的api的主体是否有一个键名为“params”?不,它没有。所有内容都是作为前面提到的对象传递的。好吧,这很奇怪,我现在能告诉您的唯一一件事是删除paramsSerializer中的返回:(params)=>{querystring.stringify(params,{arrayFormat:'forests'};},因为arrow函数已经返回了不需要指定“return”的内容,试试看,也许可以,否则等待有人回答,我会删除我的。谢谢只需将字符串化的搜索对象直接附加到url:您的示例不使用axios。我是从节点服务器而不是前端页面发出此请求。但是,我尝试使用您的示例,但没有成功。啊,好的,这是axios版本:@ChrisG您的帮助非常有价值,但这是axios请求的URL:
    https://api.osrsbox.com/items?where=%7B%22name%22:%22Abyssal%20Whip%22,%22重复%22:false%7D
    。我从node.js服务器发出此请求,您认为这与此有关吗?这对我在node: