Axios中的TransformResponse打破了响应?

6tqwzwtp  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(109)

我有一个Axios示例:

const axiosInstance = axios.create({
  responseType: 'json',
  baseURL: `...`,
  headers: {
    'Content-Type': 'application/json',
    Accept: 'application/json',
  },
  transitional: {
    forcedJSONParsing: true,
    silentJSONParsing: false,
  },
});

字符串
我也有一个非常简单的GET调用:

const login = () => {
  return axiosInstance.get('/auth/login', {
    transformResponse: ({ data }) => {
      return camelcaseKeys(data);
    },
  });
};


然而,在将Axios更新到v1后,transformResponse函数破坏了我的应用程序。如果我console.log响应,它是未解析的JSON。但是如果我 * 删除 * transformResponse函数,它会被正确解析,并且我会将响应作为JS对象,而不是JSON字符串。
为什么transformResponse函数会破坏一切?为什么它会导致Axios无法解析JSON?
请求头是:

Accept: application/json


响应头是:

Content-Type: application/vnd.api+json; charset=utf-8


同样奇怪的是,我的代码编辑器格雷将transformResponse函数变灰,而在Axios更新之前,它没有变灰。
image

dfty9e19

dfty9e191#

我检查了transformResponsehttps://github.com/axios/axios/blob/v1.x/examples/transform-response/index.html的官方示例
正确的使用方法似乎是这样的

const login = () => {
  return axiosInstance.get('/auth/login', {
    transformResponse: axios.defaults.transformResponse.concat(({ data }) => {
      return camelcaseKeys(data);
    }),
  });
};

字符串
1.当你提供一个函数或函数数组时,它会覆盖默认的transformResponse,所以你负责将json字符串序列化为js对象。
1.当你使用axios.defaults.transformResponse concat时,axios会为你进行序列化,这是默认的行为,让你添加自己的更改。

相关问题