目的:基于axios封装一个请求工具,调用接口时使用。
npm i axios
- 新建
src/utils/request.js 模块,代码如下
import axios from 'axios'
import store from '@/store'
import router from '@/router'
export const baseURL = ''
const instance = axios.create({
baseURL: baseURL
})
instance.interceptors.response.use(res => {
return res.data
}, err => {
if (err.response && err.response.status === 401) {
return router.push('/login')
}
return Promise.reject(err)
})
instance.interceptors.request.use(config => {
const token = store.state.user.profile.token
if (token) {
config.headers.Authorization = `Bearer ${token}`
}
return config
}, err => {
return Promise.reject(err)
})
export default (options) => {
return instance({
method: options.method || 'GET',
url: options.url,
[options.method.toUpperCase() === 'GET' ? 'params' : 'data']: options.data
})
}
总结:
- 创建axios实例
- 封装通用的请求方法
- 配置相关的参数,统一处理请求参数
- 请求拦截器:处理请求头token
- 响应拦截器:1、处理后端返回的数据;2、处理token的失效问题
注意:对象的键可以是动态的变量(ES6的规则)
|