赞
踩
- import axios from 'axios'
- import store from '@/store'
- import router from '@/router'
-
- // 1.实例化 create方法
- // baseURL 接口根路径
- // timeout 接口最长等待时间
- const instance = axios.create({
- baseURL: 'http://pcapi-xiaotuxian-front.itheima.net/',
- timeout: 5000
- })
-
- // 2.请求拦截器
- // 全局注入token
- // 请求拦截器支持多个,会按照先添加后执行的顺序依次执行 前面执行的拦截器处理后的config会作为后面拦截器的入参继续处理
- // 多个拦截器处理完毕的config回作为接口的正式请求参数
- instance.interceptors.request.use(config => {
- // 1.获取token
- const { token } = store.state.user.profile
- // 2.请求头设置token
- if (token) config.headers.Authorization = `Bearer ${token}`
- return config
- }, e => Promise.reject(e))
-
- // 3. 响应拦截器
- // 监控http状态码 401
- // const {success,data} =res
- // if(success){return data} else{return Promise.reject(e)}
- instance.interceptors.request.use(
- (response) => {
- return response
- },
- (e) => {
- if (e.response && e.response.status === 401) {
- const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
- router.push('/login?redirectUrl=' + redirectUrl)
- }
- return Promise.reject(e)
- }
- )
-
- /**
- * @description: axios请求的封装方法
- * @param {*} url 请求路径
- * @param {*} method 请求方法
- * @param {*} reqData 请求参数(必须是对象类型)
- * @return {*} promise对象
- */
-
- export default function request (url, method, reqData) {
- return instance({
- url,
- method,
- [method.toLowerCase() === 'get' ? 'params' : 'data']: reqData
- })
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。