axios的基本配置、请求拦截器和响应拦截器

一:基本介绍

在实际项目中,一般需要对axios进行一次封装,用来统一配置axios的基本配置和请求拦截器、响应拦截器等;

二:基本配置

我们可以通过 axios.create([config]) 来创建一个拥有 axios 通用配置的实例,下面是常用配置项:

import axios from "axios";

const request = axios.create({
	baseURL:"xxx",  // 基本地址,对于非 http 和非 https 开头的请求都会在前面拼接上这个地址
	timeout:20000,  // 超时时间,超过这个时间没有收到服务器的回复就会报错,单位是毫秒
	method:"post",  // 请求方式,默认是get,可以在这里设置默认方式为其他请求方式
	headers:{},     //请求头配置
})
export default request;

这样,我们在其他文件里面引进request就可以使用了,这个只是基本配置,在使用的时候是可以覆盖基本配置的。

三:请求拦截器

请求拦截器,就是在使用该实例发送请求时,可以在这里进行一些设置,通常用来携带token之类的功能;

import axios from "axios";

const request = axios.create({
	baseURL:"xxx",  
	timeout:20000, 
})

// 请求拦截器
request.interceptors.request.use(
	(config)=>{
		if(config.url !== "/sys/login"){   // 判断请求是否是登录接口
			config.headers.token = sessionStorage.getItem("token"); // 如果不是登录接口,就给请求头里面设置token
		}
		return config; // 返回这个配置对象,如果没有返回,这个请求就不会发送出去
	},
	(error)=>{
		return Promise.reject(error);
	}
)
export default request;

使用 request.interceptors.request.use() 函数就可以进行请求拦截器的配置,这个函数接收两个参数,第一个是成功回调函数,一个是失败回调函数,成功的回调函数有一个参数,如下图:
参数config

可以通过这些属性进行判断是否继续发送该请求。

四:响应拦截器

响应拦截器,就是收到服务器返回的数据后,可以在这里进行一些设置

import axios from "axios";

const request = axios.create({
	baseURL:"xxx",  
	timeout:20000, 
})

// 响应拦截器
request.interceptors.response.use(
	(res)=>{
		let code = res.data.code  // 获取后端返回的状态码
		if(code===200){           // 成功
			return res.data.data  // 返回里面的数据,在使用这个axios时,获取到的东西就是这里返回的东西
		}else{
			return res.data   
		}
	},
	(error)=>{
		return Promise.reject(error);
	}
)

export default request;

使用 request.interceptors.response.use() 函数可以进行响应拦截器的配置,这个函数也有两个参数,第一个是成功的回调函数,第二个是失败的回调函数,成功回调函数里面有一个参数,这个参数就是从后端返回的数据(注意: 这个数据是经过axios封装了的,所以我们一般直接取里面的data),返回的res如下:
返回的数据
这里我们可以和后端约定状态码,通过状态码进行相应的处理,比如成功就正常返回数据,token失效就跳转登录页面等等;还有需要注意的的是: 后端一般会对错误进行处理,所以发送的请求很少会直接报错(通过catch获取),而是通过状态码(一般是500)告诉你错了,但是这个axios请求时成功了的,只是返回了一个错误的信息,这个信息还是会出现在 .then 里面。

五:总结

下面是完整代码

import axios from "axios";
import router from "路由文件地址"; // 获取路由

const request = axios.create({
	baseURL:"xxx",  
	timeout:20000, 
})

// 请求拦截器
request.interceptors.request.use(
	(config)=>{
		if(config.url !== "/sys/login"){   // 判断请求是否是登录接口
			config.headers.token = sessionStorage.getItem("token"); // 如果不是登录接口,就给请求头里面设置token
		}
		return config; // 返回这个配置对象,如果没有返回,这个请求就不会发送出去
	},
	(error)=>{
		return Promise.reject(error);
	}
)

// 响应拦截器
request.interceptors.response.use(
	(res)=>{
		let code = res.data.code  // 获取后端返回的状态码
		if(code===200){           // 成功
			return res.data.data  // 返回里面的数据,在使用这个axios时,获取到的东西就是这里返回的东西
		}else if (code == 401) {  // token失效
      		router.push("/login");  // 跳转登录页
    	}else{
			return res.data   
		}
	},
	(error)=>{
		return Promise.reject(error);
	}
)

export default request;
在Vue中配置Axios拦截器可以通过以下步骤实现: 1. 首先,在项目中引入Axios库和需要的其他依赖(例如Element UI)。 2. 创建一个Axios实例,可以命名为`instances`,并设置`baseURL`等配置项。 3. 在创建的Axios实例中,使用`interceptors`属性来配置响应拦截器。 4. 在响应拦截器中,可以通过`instances.interceptors.response.use()`方法来定义成功和失败的处理函数。 5. 在成功处理函数中,可以对接口调用成功后的响应进行处理,例如打印日志或进行其他操作。 6. 在失败处理函数中,可以对接口调用失败时的情况进行处理,例如打印错误信息或显示提示消息。 7. 最后,导出配置好的Axios实例,以便在项目其他地方使用。 以下是一个示例代码,演示了如何配置Vue中的Axios拦截器: ```javascript import axios from 'axios'; import { Message } from 'element-ui'; import router from '../router'; const instances = axios.create({ baseURL: 'http://localhost', }); instances.interceptors.response.use( success => { console.log('响应拦截器,成功'); // 在这里对成功的响应进行处理 }, error => { console.log('响应拦截器,失败', error); Message.error({ message: error }); // 在这里对失败的响应进行处理 } ); export default instances; ``` 请注意,上述代码是一个示例,你可以根据自己的需求进行修改和扩展。同时,还可以根据需要配置请求拦截器,以实现在所有请求中添加统一的内容,例如请求头等。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值