版本更新后Axios未解析API响应

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

我使用的是axios版本0.18.0

const axiosInstance = axios.create({
  responseType: 'json',
  baseURL: `api/v1/example`,
  headers: {
    'Content-Type': 'application/vnd.api+json',
    Accept: 'application/vnd.api+json',
  },
});

axiosInstance.interceptors.response.use((response) => {
  console.log(response);
  return response;
}, callback);

log: 
{
  "data": { foo: "bar" }, <---- this is typeof Array (JSON is parsed automatically)
  "status": 200,
  "statusText": "",
  "headers": {},
  "config": {
  "transformRequest": {},
  ...and more
}

字符串
但是更新到最新版本后,1.6.2和我的应用程序崩溃,因为JSON不再正确解析。

axiosInstance.interceptors.response.use((response) => {
  console.log(response);
  return response;
}, callback);

log: 
{
  "data": "{\"foo\":\"bar\"}" <---- typeof string (JSON, its not parsed automatically)
  "status": 200,
  "statusText": "",
  "headers": {},
  "config": {
  "transformRequest": {},
  ...and more
}


为什么我的响应不再被正确解析?响应内容类型为:
application/vnd.api+json; charset=utf-8

dl5txlt9

dl5txlt91#

Axios应该默认将响应解析为JSON,但您的拦截器显示,可能默认值没有应用于您的axios示例。请确保您导入的axios是import axios from 'axios'而不是import { Axios } from 'axios'
如果这不起作用,您可以显式地告诉Axios将响应视为具有responseType请求配置值的json:

const axiosInstance = axios.create({
  responseType: 'json',
  baseURL: `api/v1/example`,
  headers: {
    'Content-Type': 'application/vnd.api+json',
    Accept: 'application/vnd.api+json',
  },
  responseType: 'json'
});

字符串
或与

axios.create({
  transitional: {
    forcedJSONParsing: true
  },
  // rest of config
})


也可能是JSON格式不正确。尝试在配置中将transitional.silentJSONParsing设置为false以找出答案(确保responseType也设置为“json”)

相关问题