我在Express API中使用axios,我希望在将有效负载发送到另一个API之前对其进行转换。 axios就是这个名为transformRequest
的东西。这是我遇到问题的地方。
我的代码如下:
const instance = axios.create({
baseURL: 'api-url.com',
transformRequest: [
(data, headers) => {
const encryptedString = encryptPayload(JSON.stringify(data));
data = {
SecretStuff: encryptedString,
};
return data;
},
],
});
// firing off my request using the instance above:
const postData = {
id: 1,
name: 'James',
};
instance.post('/getStuff', postData)
最后,我想发布api-url.com
JSON:{"SecretStuff": "some-base64-string"}
- 而不是上面显示的postData
对象。
从文档中,它说:“数组中的最后一个函数必须返回一个字符串或Buffer,ArrayBuffer,FormData或Stream的实例” - 当然,我在这里返回一个对象,数据。在axios docs中奇怪的是,它显示它们从data
返回transformRequest
,但在他们的情况下,它必须是正确的数据类型。
我如何实际使用axios转换有效负载?
答案 0 :(得分:4)
axios.create({
transformRequest: [(data, headers) => {
// modify data here
return data;
}, ...axios.defaults.transformRequest]
});
必须在此处将the original axios.defaults.transformRequest
附加到transformRequest
选项中。
答案 1 :(得分:3)
您是否想要JSON.stringify()
您转换的帖子数据?如下所示:
const instance = axios.create({
baseURL: 'api-url.com',
transformRequest: [
(data, headers) => {
const encryptedString = encryptPayload(JSON.stringify(data));
data = {
SecretStuff: encryptedString,
};
return JSON.stringify(data);
},
],
});
答案 2 :(得分:0)
要修改值而不是覆盖请求中的输出,我会这样做:
'null'