axios transformResponse返回未定义的

qc6wkl3g  于 2022-11-23  发布在  iOS
关注(0)|答案(3)|浏览(214)

使用下面的代码可以得到预期的response.data值:

axios({
  method,
  url
}).then(response => { console.log(response) })

但是,当我按如下方式添加transformResponse属性时,得到的response.data值为undefined

axios({
  method,
  url,
  transformResponse: [(data) => {
    return data
  }]
}).then(response => { console.log(response) })

谁能告诉我我错过了什么!谢谢

vaqhlq81

vaqhlq811#

我建议你使用拦截器,因为拦截器更干净
拦截器作为中间件处理您的请求
删除transformResponse并添加以下内容
第一个

w1e3prcc

w1e3prcc2#

你可以检查下面的示例来安全地解析。transformResponse获取原始数据,这样你就可以解析它。

const instance = axios.create({
  baseURL: baseURL,
  transformResponse: [
    (data) => {
      let resp;
      try {
        resp = JSON.parse(data);
      } catch (error) {
        throw Error(
          `[requestClient] Error parsingJSON data - ${JSON.stringify(
            error
          )}`
        );
      }
      if (resp.status === "success") {
        return resp.data;
      } else {
        throw Error(`Request failed with reason -  ${data}`);
      }
    },
  ],
});

否则,您可以使用拦截器来简化它。
第一次

wooyq4lh

wooyq4lh3#

对于任何想知道的人,这里是回应:

axios.get(url, {
  headers: {
    'Content-Type': 'application/json'
  },
  transformResponse: axios.defaults.transformResponse.concat((data) => {
    console.log(data) // this should now be JSON
  })
})

来自https://github.com/axios/axios/issues/430#issuecomment-243481806

相关问题