vue中使用axios封装成request使用

前端小菜鸡一枚,总结项目中发现的小技巧,有什么不对和错误希望各位指出和补充,谢谢大家观看!
·························································································································
今天来看一下axios中拦截器的封装,便于使用,直接贴代码

import Vue from 'vue'
import axios from 'axios'
import store from '@/store'            //VueX
import { Modal, notification } from 'ant-design-vue'  //这里换成正在使用ui框架的消息提示
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { baseURL } from '@/api/api'     //baseURL,我写在api里
// 创建 axios 实例
const service = axios.create({
  baseURL: baseURL, // api base_url
  timeout: 9000 // 请求超时时间
})

const err = error => {                          //错误拦截回调函数
  if (error.response) {
    let data = error.response.data
    const token = Vue.ls.get(ACCESS_TOKEN)          //获取保存的token
    switch (error.response.status) {
      case 403:               //这里的错误code代表具体含义需要与后台沟通,进行统一的消息提示
        notification.error({ message: '系统提示', description: '拒绝访问', duration: 4 })
        break
      case 500:
        if (token && data.message == 'Token失效,请重新登录') {      //处理有统一的消息或code码
          Modal.error({
            title: '登录已过期',
            content: '很抱歉,登录已过期,请重新登录',
            okText: '重新登录',
            mask: false,
            onOk: () => {
              store.dispatch('Logout').then(() => {       // 执行vueX里封装好的退出登录操作            
                Vue.ls.remove(ACCESS_TOKEN)               // 删除保存的toke
                window.location.reload()                 // 刷新浏览器
              })
            }
          })
        }
        break
      case 404:
        notification.error({ message: '系统提示', description: '很抱歉,资源未找到!', duration: 4 })
        break
      case 401:
        notification.error({ message: '系统提示', description: '未授权,请重新登录', duration: 4 })
        if (token) {
          store.dispatch('Logout').then(() => {
            setTimeout(() => {
              window.location.reload()
            }, 1500)
          })
        }
        break
      default:
        notification.error({
          message: '系统提示',
          description: '连接超时!',
          duration: 4
        })
        break
    }
  }
  return Promise.reject(error)
}

// request interceptor
service.interceptors.request.use(            
  config => {                       
    const token = Vue.ls.get(ACCESS_TOKEN)
    if (token) {
      config.headers['X-Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改
    }
    if (config.method == 'get') {         //这里是可以对所有get方法或其他方法进行操作
        config.params = {      
          _t: Date.parse(new Date()) / 1000,// 在URL中加时间戳就会保证每一次发起的请求都是一个不同于之前的请求,这样就能避免浏览器对URL的缓存
          ...config.params
        }
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// response interceptor
service.interceptors.response.use(response => {  
  return response.data
}, err)   


export { service as axios }

至此,request.js 基本封装完成了,有更多需要的小伙伴请看 Axios用法介绍

import { axios } from '@/utils/request'
//post
export function postAction(url, parameter) {
  return axios({
    url: url,
    method: 'post',
    data: parameter
  })
}

//post method= {post | put}
export function httpAction(url, parameter, method) {
  return axios({
    url: url,
    method: method,
    data: parameter
  })
}

//put
export function putAction(url, parameter) {
  return axios({
    url: url,
    method: 'put',
    data: parameter
  })
}

//get
export function getAction(url, parameter) {
  return axios({
    url: url,
    method: 'get',
    params: parameter
  })
}

创建各种请求方式,即可在页面内调用,也可以创建不同页面的api文件直接附上url,直接在页面调用方法,至此axios的基本封装就完成了,有不足或错误的地方,希望小伙伴们及时批评指出~

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值