axios transformRequest - 如何更改JSON有效负载

时间:2018-02-16 04:03:05

标签: javascript axios

我在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转换有效负载?

3 个答案:

答案 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'