回顾
上次呢分享了axios以下内容:
- 如何封装Get、Post、Delet、Put方法
- 统一管理api请求及如何使用
前言
今天主要分享一下如何携带登录状态的token信息等以及如何集中管理请求返回的错误code。
本次的内容主要涉及到axios的请求拦截、响应拦截。
PS:本次案例展示的所有代码,依旧写在request.js里(上次分享的文件)
一、请求拦截
1. 什么是请求拦截呢?
请求拦截器的作用是在请求发送前进行一些操作,例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易
2. 代码示例
下面呢,给大家放一下代码,可以一目了然。
import axios from "axios";
// 创建axios实例
const service = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 30000,
});
// request请求拦截器
service.interceptors.request.use(
config => {
// 在发送请求之前做些什么,例如加入token
config.headers["token"] = "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ"; //请求头中添加token
config.headers["userId"] = '131313';//可以添加项目需要的一些信息等等...
return config;
},
error => {
Promise.reject(error);
}
);
二、响应拦截
1. 什么是响应拦截呢?
响应拦截器的作用是在接收到响应后进行一些操作,可以统一管理返回的状态码,最常见的例如在服务器返回登录状态失效,需要重新登录的时候,跳转到登录页。
代码如下(示例):
// 响应拦截器
axios.interceptors.response.use(
response => {
// 在接收响应做些什么
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
},
// 服务器状态码不是200的情况
error => {
if (error.response.status) {
switch (error.response.status) {
// 401: 未登录
// 未登录则跳转登录页面,并携带当前页面的路径
// 在登录成功后返回当前页面,这一步需要在登录页操作。
case 401:
router.replace({
path: '/login',
query: { redirect: router.currentRoute.fullPath }
});
break;
// 403 token过期
case 403:
break;
// 404请求不存在
case 404:
Toast({
message: '网络请求不存在',
duration: 1500,
forbidClick: true
});
break;
// 其他错误,直接抛出错误提示
default:
Toast({
message: error.response.data.message,
duration: 1500,
forbidClick: true
});
}
return Promise.reject(error.response);
}
}
);
总结
今天的内容到此结束,axios如何封装也分享完毕了,希望对大家有所帮助,欢迎提意见~~