// import axios from 'axios'// // 配置基地址// const request = axios.create({// baseURL: 'http://toutiao-app.itheima.net'// })// // request2可以按需的导出// export const request2 = axios.create({// baseURL: 'http://toutiao-app.itheima2.net2'// })// // 默认导出request// export default requestimport axios from 'axios'// 在普通的js文件中import store from '../store/index'// import router from '../router/auth'import router from '../router/auth'const request = axios.create({baseURL: 'http://localhost:8000'// baseURL: 'http://192.168.15.138:8000'// baseURL: 'http://192.168.15.28:8000'})// 请求拦截器request.interceptors.request.use(config => {// config就是本次请求用到的配置项const token = store.state.tokenInfo.tokenif (token) {// 看看有没有token,只要有token,就加上token,也就是就传递tokenconfig.headers.Authorization = `Bearer ${token}`}return config}, function (error) {// 对请求错误做些什么return Promise.reject(error)})// 响应拦截器request.interceptors.response.use(response => {return response}, async function (error) {// 如果发生了错误,判断是否是401(401就是token错误或者token失效了)console.dir(error)if (error.response.status === 401) {const refreshToken = store.state.tokenInfo.refresh_tokenif (refreshToken) {// 有的话请求新tokentry {const res = await axios({// 把地址写全是不用request有个请求拦截器(如果走请求拦击器就会补充一个错的token)了url: 'http://localhost:8000/v1_0/authorizations',method: 'PUT',headers: {Authorization: `Bearer ${refreshToken}`}})console.log(res)// 把新token保存到vuex中const newToken = res.data.data.tokenstore.commit('mSetToken', { token: newToken, refresh_token: refreshToken })// error.config里面就保留着上次请求的所有参数,调用request请求就行return request(error.config)} catch (err) {// 1. 清空tokenstore.commit('mSetToken', {})// 2. 回去登陆router.push('/login?backto=' + encodeURIComponent(router.currentRoute.fullPath))// 3. 返回错误信息return Promise.reject(new Error('请求新token失败'))}} else {// 1. 清空tokenstore.commit('mSetToken', {})// 2. 回去登陆, 带上要返回的地址// router.currentRoute.fullPath// 获取到之前访问的路由地址router.push('/login?backto=' + encodeURIComponent(router.currentRoute.fullPath))// 3. 返回错误信息return Promise.reject(new Error('refresh_token不存在'))}}})// moudle.exports也是按需导出,但是一个页面中moudle.exports按需导出的时候// exports按需导出就不管用了// export是按需导出。注意导入按需导出的时候,需要用{}接收// export const request2 = axios.create({// baseURL: 'http://toutiao-app.itheima2.net2'// })// 默认导出一个页面只能有一个默认导出export default request
这个时候在api页面中导入request发axios的时候,就已经有请求和响应拦截器的功能了
正常情况下的请求拦截器
响应拦截器,中除了后端返回的有效数据,其他的都是axios给返回的
