1、首先response返回code500时,一般由两种原因引起,一是前端传参有问题,二是后台服务器问题,第二种情况需要去找后端沟通解决。这里只讨论第一种情况,前端传参问题。

2、我这里遇到的是参数格式的问题。

以下三张图片,可以看到在我连通的接口中:

1)response headers中content-type是 Content-Type: application/json; charset=utf-8,

2)payload中的格式也是字符串的形式。

3)后台返回code500,并未获取到后台数据

 

 

3、所以我去对比了后台的接口情况,发现问题如下: 

1)response headers中content-type是 Content-Type: application/json

2)  payload格式是form data形式

很明显是我传参的格式出现了问题,导致后端返回code500。

 

 

4、解决办法

问题分析:

axios 默认是 Payload格式数据请求,但有时候后端接收参数要求必须是 Form Data 格式的,所以我们就得进行转换。
Payload和Form Data的主要设置是根据请求头的 Content-Type 的值来的:
Payload    Content-Type: 'application/json; charset=utf-8'
Form Data   Content-Type: 'application/x-www-form-urlencoded'

解决方法:

qs 模块是安装 axios 模块的时候就有的,不用另行安装,通过 import 引入即可使用。

import axios from 'axios';

import qs from 'qs'

// 实例对象

let instance = axios.create({

  timeout: 3000,

  headers: {

    'Content-Type': 'application/x-www-form-urlencoded'

  }

})

// 请求拦截器

instance.interceptors.request.use(

  config => {

    config.data = qs.stringify(config.data) // 转为formdata数据格式

    return config

  },

  error => Promise.error(error)

)

在你的接口方法处进行配置:

export  const  getInfo = (data) => {

  return instance.post(testSystemUrl + '/user/pageList/', data);

};

然后刷新页面就可以啦~~~~

 

 

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐