我试图在axios get中传递一个数组作为参数。这是一个使用当前包的react应用程序。
我已经使用每个解决方案的代码来处理其他类似的问题。我已经尝试应用两种不同的方法/语法形式,从注解代码中可以看出。
下面是代码:
import Qs from "qs";
import axios from "axios";
console.log(
"ContactContainer - useEffect[currentUser] - Before check of currentUser.contactRequestsTo.length > 0 ",
currentUser.contactRequestsTo.length
);
const userIds = JSON.stringify(currentUser.contactRequestsTo);
//const userIds = currentUser.contactRequestsTo;
console.log("ContactContainer - useEffect[currentUser] - userIds ", userIds);
if (currentUser.contactRequestsTo.length > 0) {
(async () => {
//const contactRequestsToDetails = await axios.get(`${getUserDetailsRoute}`,{
// params: {
// arrayOfUserIds: userIds
// },
// paramsSerializer: (params) => Qs.stringify(params, {arrayFormat: 'repeat'})
//});
const instance = axios.create({
paramsSerializer(params) {
return Qs.stringify(params, { arrayFormat: "brackets" });
},
});
const contactRequestsToDetails = await instance.get(getUserDetailsRoute);
console.log(
"ContactContainer - useEffect[currentUser] - contactRequestsToDetails = ",
contactRequestsToDetails
);
})();
}
一些软件包版本如下:
"axios": "^1.2.1",
"mongoose": "^6.8.0",
"qs": "^6.11.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
原始数组currentUser. contactRequestsTo为:
ContactContainer - useEffect[] - currentUser.contactRequestsTo =
Array(2)
0:"63b476a79c42d2b60fc39cbc"
1:"63b476ea9c42d2b60fc39ccd"
length:2
[[Prototype]]:Array(0)
我尝试使用原始数组作为输入,然后对数组应用JSON.Stringify,以获得如下所示的UserId:
userIds ["63b476a79c42d2b60fc39cbc","63b476ea9c42d2b60fc39ccd"]
我还使用了两种格式,一种是注解掉的,另一种如图所示。
在所有情况下,我收到了相同的错误。
Uncaught (in promise)
code:"ERR_BAD_OPTION_VALUE"
message:"options must be an object"
name:"AxiosError"
stack:"AxiosError: options must be an object\n at Object.assertOptions (http://localhost:8080/static/js/main.d2f30e44.js:2:356049)\
我看到其他用户也遇到了同样的错误,并在我解释解决方案时应用了更改。
我的语法是否有问题或者其他什么问题会导致这个错误?
1条答案
按热度按时间bybem2ql1#
paramsSerializer
的配置在v1.0.0中已更改。它现在是一个具有encode
、serialize
和indexes
属性的对象。如果你想在查询参数数组中添加方括号,可以使用下面的代码。另外,不要将数组序列化为JSON
请参见www.example.comhttps://github.com/axios/axios#request-config
由于
indexes: false
是默认值,因此您根本不清楚为什么您觉得需要使用paramsSerializer
。