前端小菜鸡一枚,总结项目中发现的小技巧,有什么不对和错误希望各位指出和补充,谢谢大家观看!
·························································································································
今天来看一下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 = https://www.it610.com/article/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
})
}
【vue.js|vue中使用axios封装成request使用】创建各种请求方式,即可在页面内调用,也可以创建不同页面的api文件直接附上url,直接在页面调用方法,至此axios的基本封装就完成了,有不足或错误的地方,希望小伙伴们及时批评指出~
推荐阅读
- 操作系统|[译]从内部了解现代浏览器(1)
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- JavaScript|vue 基于axios封装request接口请求——request.js文件
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- JavaScript|JavaScript — 初识数组、数组字面量和方法、forEach、数组的遍历
- JavaScript|JavaScript — call()和apply()、Date对象、Math、包装类、字符串的方法
- JavaScript|JavaScript之DOM增删改查(重点)
- vue.js组件开发
- 前端开发|Vue2.x API 学习