axios设置content-type

简介: axios设置content-type

axios设置content-type


用axios总觉得莫名的这个那个出错,就简单的总结了下。

cdn的地址https://unpkg.com/axios@0.19.0/dist/axios.min.js,版本号可以更换,没有版本号就是最新发布的。

不过,当前这年头,很多时候npm i axios即可。

关键使用axios的步骤:

  1. 创建axios的实例,这样能将公共配置放在这里,如instance.js,处理各种异常情况
  2. 每个api单独写好,多的话写个文件夹,相关的api可以写在一个文件里,少的话直接一个文件如api.js
  3. 将api放在全局,这样使用的时候,无需引入,页面调接口的时候直接 this.api.apiName()

必须先理解content-type

get请求不存在设置content-type。只有post和put用到content-type,常用的post方式,所以这里着重说post。

post的content-type三种类型:

  • Content-Type: application/json
    对于axios,post的时候axios.post(url,{a:1,b:2}),第二个参数是对象的时候,默认是这个类型
  • Content-Type: application/x-www-form-urlencoded
    对于axios,post的时候let data = {a:1,b:2}; axios.post(url,qs.stringify({ data })),第二个参数是字符串的时候,默认是这个类型
  • Content-Type: multipart/form-data
    对于axios,post的时候let data = new FormData(); data.append('a',1'); data.append('b',2); axios.post(url,data),参数是formData类型的时候,默认是这个类型,如果用form自带的action提交,默认是这个类型

以上三种方式,服务器会以不同的方式解析,这点尤其注意!!!!!

换言之,content-type会根据参数的类型会自动有对应的值,一般无需设置~~~

但是,有些情况是,我想传对象,但实际服务器需要的的是application/x-www-form-urlencoded,此时需要只需要统一设置请求前将参数变成字符串即可transformRequest: [ function (data) { return Qs.stringify(data) } ],

此处小结,上面的解释多看几遍,我反射弧长,很久才大约明白到底说的啥。

创建axios的实例

以下是示例代码。

/**
 * axios封装
 * 请求拦截、响应拦截、错误统一处理
 */
import axios from 'axios';
// 创建axios实例
var instance = axios.create({    timeout: 1000 * 12});
/** 
 * 请求拦截器 
 * 每次请求前,如果存在token则在请求头中携带token 
 */ 
instance.interceptors.request.use(    
    config => {        
        // 这里可以加统一的参数,appid,token这类的
    },    
    error => Promise.error(error)
)
// 响应拦截器
instance.interceptors.response.use(    
    // 请求成功
    res => res.status === 200 ? Promise.resolve(res) : Promise.reject(res),    
    // 请求失败
    error => {
        const { response } = error;
        if (response) {
            // 请求已发出,但是不在2xx的范围,一般会和后台确定一些错误码,处理错误
            errorHandle(response.status, response.data.message);
            return Promise.reject(response);
        } else {
            // 请求都没发出去
            // 处理断网的情况
            if (!window.navigator.onLine) {
               // 断网做啥
            } 
            return Promise.reject(error);
        }
    }
);
export default instance;

每个api单独写好

// api.js
// 以对象的形式传参,这样参数不需要考虑顺序的问题
const ajaxKeMuData = ({ wind, projectSname = "" }) =>
  instance.post('/keMuXuBanRate', {
    wind,
    projectSname
  });
export {
    ajaxKeMuData
}

将api放在全局

最后统一加在全局里,这边如果是vue的项目

// main.js
import api from './api' // 导入api接口
Vue.prototype.$api = api; // 将api挂载到vue的原型上

页面里调用的时候this.$api.ajaxKeMuData({...}).then(...)

最后

这边写的很粗略,也还有些需要完善,很多细节请看axios的好文章,特别是更新处

axios的好文章,特别是更新处

content-type的解释

目录
相关文章
axios设置请求头无效
axios设置请求头无效
1184 0
|
7月前
|
JavaScript
vue element upload组件配合axios实现用 “Content-Type“: “multipart/form-data“上传方式导入xls文件
vue element upload组件配合axios实现用 “Content-Type“: “multipart/form-data“上传方式导入xls文件
axios文件上传和 Content-Type类型介绍
axios文件上传和 Content-Type类型介绍
|
JSON 数据格式
axios.post请求出错:Request header field content-type is not allowed by Access-Control-Allow-Headers in……
axios.post请求出错:Request header field content-type is not allowed by Access-Control-Allow-Headers in……
|
前端开发 API
axios定制化设置请求响应拦截器,统一处理请求响应
设置拦截器的目的在于:可以定制化,设置请求头,公共api,超时时间。统一处理响应,对于前端获取的数据更加清晰。
424 0
|
JSON JavaScript 数据格式
axios 设置请求头------vue
axios 设置请求头------vue
256 0
|
2月前
|
资源调度 JavaScript
|
4月前
|
JavaScript 前端开发
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
这篇文章主要讨论了axios的使用、原理以及源码分析。 文章中首先回顾了axios的基本用法,包括发送请求、请求拦截器和响应拦截器的使用,以及如何取消请求。接着,作者实现了一个简易版的axios,包括构造函数、请求方法、拦截器的实现等。最后,文章对axios的源码进行了分析,包括目录结构、核心文件axios.js的内容,以及axios实例化过程中的配置合并、拦截器的使用等。
【Vue面试题二十五】、你了解axios的原理吗?有看过它的源码吗?
|
2月前
|
缓存 JavaScript 搜索推荐
|
4月前
|
JavaScript 前端开发
【Vue面试题二十七】、你了解axios的原理吗?有看过它的源码吗?
文章讨论了Vue项目目录结构的设计原则和实践,强调了项目结构清晰的重要性,提出了包括语义一致性、单一入口/出口、就近原则、公共文件的绝对路径引用等原则,并展示了单页面和多页面Vue项目的目录结构示例。