我正在使用一个无法再调整的现有后端。我需要打电话来获取所有消息。参数之一是类型,这可用于获取来自特定类型的所有消息。后端开发人员告诉我我必须多次使用它,如下所示:
<块引用>/api/message?type=test&type=test2
所以我尝试将它作为数组发送,结果是:
<块引用>/api/message?type[]=test&type[]=test2
找到一些关于 SO 的信息让我使用了 QS 但这也没有给我我需要的结果
<块引用>api/message?type%5B0%5D=test&type%5B1%5D=test2
export const getMessages = () =>
baseApi
.get('/message', {
params: {
type: [
'test',
'test2'
]
},
paramsSerializer: (params) => {
return qs.stringify(params)
}
})
.then((r) => r.data as Message[])
答案 0 :(得分:0)
您可以使用 append 方法。喜欢 (URLSearchParams):
const params = new URLSearchParams()
params.append("type","test")
params.append("type","test2")
然后,您像之前一样在请求中设置参数:
export const getMessages = () =>
baseApi
.get('/message', {
params: {
params
},
paramsSerializer: (params) => {
return qs.stringify(params)
}
})
.then((r) => r.data as Message[])
答案 1 :(得分:0)
这与 Axios 无关。 qs 库负责生成该字符串。查看它的 documentation:
<块引用>当数组被字符串化时,默认情况下它们是显式的 指数:
qs.stringify({ a: ['b', 'c', 'd'] });
// 'a[0]=b&a[1]=c&a[2]=d'
您可以通过将索引选项设置为 false 来覆盖它:
qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false });
// 'a=b&a=c&a=d'