• vue axios 封装(三)


    封装三:

    import axios from 'axios'
    import { Message, MessageBox } from 'element-ui'
    import store from '../store'
    import { getToken } from '@/utils/auth'
    
    // 创建axios实例
    const service = axios.create({
      baseURL: process.env.BASE_API, // api的base_url
      timeout: 10000 // 请求超时时间
    })
    
    // request拦截器
    service.interceptors.request.use(config => {
      // console.log('store.getters.token', getToken())
      if (store.getters.token) {
        // console.log('tag9528', 'bearer ' + getToken())
        config.headers['Authorization'] = 'bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
      } else if (getToken()) {
        config.headers['Authorization'] = 'bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
      }
      return config
    }, error => {
      // Do something with request error
      // console.log(error) // for debug
      Promise.reject(error)
    })
    
    // service.interceptors.request.use(config => {
    //   if (store.getters.token) {
    //     config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
    //   }
    //   return config
    // }, error => {
    //   // Do something with request error
    //   console.log(error) // for debug
    //   Promise.reject(error)
    // })
    
    // respone拦截器
    // service.interceptors.response.use(
    //   response => {
    //     console.log(response)
    //     const res = response.data
    //     if (!res.success) {
    //       Message({
    //         message: res.message,
    //         type: 'error',
    //         duration: 5 * 1000
    
    //       })
    //       // 401:Token 过期了;
    //       if (response.status === 401) {
    //         // 重新获得token
    //       }
    //       // 50008:非法的token; 50012:其他客户端登录了;
    //       if (res.code === 50008 || res.code === 50012 || response.status === 401) {
    //         MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
    //           confirmButtonText: '重新登录',
    //           cancelButtonText: '取消',
    //           type: 'warning'
    //         }).then(() => {
    //           store.dispatch('FedLogOut').then(() => {
    //             location.reload()// 为了重新实例化vue-router对象 避免bug
    //           })
    //         })
    //       }
    //       return Promise.reject('error')
    //     } else {
    //       return response
    //     }
    //   },
    //   error => {
    //     console.log('err' + error)// for debug
    //     Message({
    //       message: error.message,
    //       type: 'error',
    //       duration: 5 * 1000
    //     })
    //     return Promise.reject(error)
    //   }
    // )
    service.interceptors.response.use(
      response => {
        const res = response.data
        if (!res.success) {
          Message({
            message: res.message,
            type: 'error',
            duration: 5 * 1000
          })
          if (res.success === false) {
            Message({
              message: res.error,
              type: 'error',
              duration: 5 * 1000
            })
          }
          // 401:Token 过期了;
          if (response.status === 401) {
            // 重新获得token
          }
          // 50008:非法的token; 50012:其他客户端登录了;
          if (res.code === 50008 || res.code === 50012 || response.status === 401) {
            MessageBox.confirm('你已被登出,可以取消继续留在该页面,或者重新登录', '确定登出', {
              confirmButtonText: '重新登录',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              store.dispatch('FedLogOut').then(() => {
                location.reload()// 为了重新实例化vue-router对象 避免bug
              })
            })
          }
          return Promise.reject('error')
        } else {
          return response
        }
      },
      error => {
        // console.log('err' + error)// for debug
        Message({
          message: error.message,
          type: 'error',
          duration: 5 * 1000
        })
        return Promise.reject(error)
      }
    )
    /**
     * 封装post请求
     * @param url
     * @param data
     */
    export function post(url, data) {
      return service({
        url: url,
        method: 'post',
        data: data
      })
    }
    
    /**
     * 封装get请求
     * @param url
     * @param data
     */
    export function get(url, data) {
      return service({
        url: url,
        method: 'get',
        data: data
      })
    }
    /**
     * 封装http请求
     * @param url
     * @param data
     */
    export function http(obj) {
      return service({
        url: obj.url,
        method: obj.method,
        data: obj.data
      })
    }
    export default service
    
  • 相关阅读:
    [LeetCode] 294. Flip Game II 翻转游戏之二
    [LeetCode] 293. Flip Game 翻转游戏
    [LeetCode] 266. Palindrome Permutation 回文全排列
    [LeetCode] 288. Unique Word Abbreviation 独特的单词缩写
    [LeetCode] Self Crossing 自交
    [LeetCode] 281. Zigzag Iterator 之字形迭代器
    [LeetCode] 251. Flatten 2D Vector 压平二维向量
    [LeetCode] 250. Count Univalue Subtrees 计数相同值子树的个数
    [LeetCode] 249. Group Shifted Strings 群组偏移字符串
    [LeetCode] 248. Strobogrammatic Number III 对称数之三
  • 原文地址:https://www.cnblogs.com/cc-freiheit/p/9933616.html
Copyright © 2020-2023  润新知