| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- import axios from 'axios' // 引入axios
- import qs from 'qs' // 序列化字符串
- import store from '../store/index' // 引入全局状态管理
- import router from '../router' // 路由
- import { Toast } from 'vant' // 控件
- // 环境切换
- if (process.env.NODE_ENV === 'development') {
- axios.defaults.baseURL = ''
- } else if (process.env.NODE_ENV === 'debug') {
- axios.defaults.baseURL = '测试环境'
- } else if (process.env.NODE_ENV === 'production') {
- axios.defaults.baseURL = '生产环境'
- }
- // 请求超时时间
- axios.defaults.timeout = 10000
- // 线上
- let Base = 'http://sports.bocai108.com'
- // 开发
- //let Base = 'http://sports.5gogo.com'
- function headerUrl (url) {
- url = Base + url
- return url
- }
- // post请求头
- axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'
- // request 请求拦截器
- axios.interceptors.request.use(
- config => {
- // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加
- // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
- // console.log(store);
- const token = store.state.token
- token && (config.headers.Authorization = token)
- return config
- },
- error => {
- return Promise.error(error)
- })
- // response 响应拦截器
- axios.interceptors.response.use(
- response => {
-
- if (response.status === 200) {
- return Promise.resolve(response)
- } else {
- return Promise.reject(response)
- }
- },
- // 服务状态码不是200的情况
- error => {
- console.log(error.response);
- if (error.response) {
- switch (error.response.status) {
- // 401 未登录
- // 未登录则跳转登录页面,并携带当前页面的路径
- // 在登录成功后返回当前页面,这一步需要在登录页操作。
- case 401:
- router.replace({
- path: '/login',
- query: {redirect: router.currentRoute.fullPath}
- })
- break
- // 403 token过期
- // 登录过期对用户进行提示
- // 清除本地token和清空vuex中token对象
- // 跳转登录页面
- case 403:
- Toast({
- message: '登录过期,请重新登录',
- duration: 1000,
- forbidClick: true
- })
- localStorage.removeItem('token')
- store.commit('loginSuccess', null)
- // 跳转登录页面,并将要浏览的页面fullpath传过去,登录成功后跳转到要访问的页面
- setTimeout(() => {
- router.replace({
- path: '/login',
- query: {
- redirect: router.currentRoute.fullPath
- }
- })
- }, 1000)
- break
- // 404 请求不存在
- case 404:
- Toast({
- message: '网络请求不存在',
- duration: 1500,
- forbidClick: true
- })
- break
- // 其他错误直接抛出错误提示
- default:
- Toast({
- message: error.response.data.message,
- duration: 1500,
- forbidClick: true
- })
- }
- return Promise.reject(error.response)
- }
- }
- )
- export default {
- /**
- * get方法对应get请求
- * @param {String}url 请求地址
- * @param {Object}params 携带参数
- * @returns {Promise}
- */
- get (url, params) {
-
- return new Promise((resolve, reject) => {
- axios.get(headerUrl(url), {
- params
- })
- .then(res => {
- resolve(res)
- })
- .catch(err => {
- reject(err)
- })
- })
- },
- /**
- * post方法对应post请求
- * @param {String} url 请求地址
- * @param {Object} params 携带参数
- * @returns {Promise}
- */
- post (url, params) {
- return new Promise((resolve, reject) => {
- axios.post(headerUrl(url), qs.stringify(params))
- .then(res => {
- resolve(res)
- })
- .catch(err => {
- reject(err)
- })
- })
- }
- }
|