需求分析
- 在本项目中的数据请求时有需要统一注入的token值,并且后台返回项目嵌套层级较深,所以这里使用了axios里的请求拦截和响应拦截技术,处理这个需求
请求拦截器
- 在本项目中,所有的数据请求时都需要token值作为请求头标识,代表已经登入的状态和用户的身份,因为发起的网络请求次数非常多所以选择使用请求拦截器的技术在发起请求时注入统一的请求头
service.interceptors.request.use(config => {
if (store.getters.token) {
config.headers['Authorization'] = `Bearer ${store.getters.token}`
}
return config
}, error => {
return Promise.reject(error)
})
响应拦截器
- 项目中后台返回的数据嵌套都比较深,所以在响应到数据后使用响应拦截器的技术对项目做解构处理,并在成功后返回解构出来的数据
service.interceptors.response.use(response => {
const { success, message, data } = response.data
if (success) {
return data
} else {
Message.error(message)
return Promise.reject(new Error(message))
}
}, error => {
return Promise.reject(error)
})