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

时间:2020-10-08 20:04:15

标签: javascript node.js rest http axios

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

GET https://api.osrsbox.com/items?where={ "name": "Abyssal whip", "duplicate": false }

主要问题是axios自动对字符串进行编码。在StackOverflow中搜索解决方案,我来了:


    const item = "Abyssal Whip"

    const config = {
        paramsSerializer: (params) => {
            return querystring.stringify(params, { arrayFormat: 'brackets' });
        },
        params: {
            where : {
                name: item,
                duplicate: false
            }
        }
    }

    axios.get("https://api.osrsbox.com/items", config).then( (resp) => {
        [...]
    })

这将导致以下请求:

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

我想知道我在做什么错。预先感谢。

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

2 个答案:

答案 0 :(得分:0)

这是您的API接受的一种非常奇怪的格式。但是我想这就是您必须使用的...

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

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

(我希望您的示例请求中的空格不是必需的,否则将无法使用)

答案 1 :(得分:-1)

您必须使用npm软件包“ qs”

  1. npm i qs

  2. 创建一个包含所有请求正文参数的对象,例如-

const requestBody = {

.......;

}

  1. 现在正在发出Axios请求-

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