携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
我问你答
首先第一个问题:封装的文件在哪?
不会吧不会吧,不会真的有人不知道这么简单的问题吧
是在utils/request.js 中 附赠axios的拦截器官网
第二个:都知道拦截器有两(请求拦截器和响应拦截器),但它们各自作用是啥?
请求拦截器:顾名思义就是在发送请求的时候进行拦截,主要就是完成token的统一注入
// axios的请求拦截器
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['X-Token'] = getToken()
}
return config
},
error => {
console.log(error)
return Promise.reject(error)
}
)
响应拦截器:就是在响应时,数据还没有返回回去时进行拦截,主要处理返回的数据异常 和数据结构 问题
// 响应拦截器
service.interceptors.response.use(
response => {
const res = response.data
// if the custom code is not 20000, it is judged as an error.
if (res.code !== 20000) {
Message({
message: res.message || 'Error',
type: 'error',
duration: 5 * 1000
})
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// to re-login
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
confirmButtonText: 'Re-Login',
cancelButtonText: 'Cancel',
type: 'warning'
}).then(() => {
store.dispatch('user/resetToken').then(() => {
location.reload()
})
})
}
return Promise.reject(new Error(res.message || 'Error'))
} else {
return res
}
},
error => {
console.log('err' + error) // for debug
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
其实应该先在utils/request.js文件中,先搭建一个简单的模块,其实不知道的内容,看前面官网
// 导出一个axios的实例 而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
const service = axios.create() // 创建一个axios的实例
// service.interceptors.request.use() // 请求拦截器
// service.interceptors.response.use() // 响应拦截器
export default service // 导出axios实例
封装axios的内容有几个
有三个
- axios.create(创建axios实例)
- 请求拦截器
- 响应拦截器
不会吧不会吧,这么简单/基础的知识点,不会还有人不知道吧
过程图