axios在实际项目中的封装

axios在实际项目中的封装

1、axios的封装

js 复制代码
import axios from 'axios'
import { message } from 'ant-design-vue'
import {
	getLocalToken,
	removeLocalToken
} from '@/utils/auth'

const service = axios.create({
	timeout: 300000 // 请求超时
})

//请求拦截
service.interceptors.request.use(
	(config) => {
		const token = getLocalToken() // 获取在本地存储的token 
		config.headers['Authorization'] = `Bearer ${token}`
		config.headers['APPID'] = 'dataValidApp'
		return config
	},
	(error) => {
		// 请求错误
		return Promise.reject(error)
	}
)

// 响应拦截
service.interceptors.response.use(
	// 获取响应状态
	(response) => {
		const res = response.data
		if (res.code == 401) {
			removeToken()
			removeLocalToken()
			message.error(res.message || 'Error')
			const host = location.host
			const protocol = location.protocol
			window.location.href = `${protocol}//${host}/base/#/login`
		} else if (res.code != 200) {
			message.error(res.message || 'Error')
			return Promise.reject(res.message) // 返回接口返回的错误信息
		} else {
			return res
		}
	},
	(err) => {
		if (err && err.response) {
			switch (err.response.status) {
				case 400:
					err.message = '请求错误'
					break
				case 401:
					err.message = '未授权,请登录'
					break
				case 403:
					err.message = '拒绝访问'
					break
				case 404:
					err.message = `请求地址出错: ${err.response.config.url}`
					break
				case 408:
					err.message = '请求超时'
					break
				case 500:
					err.message = '服务器内部错误'
					break
				case 501:
					err.message = '服务未实现'
					break
				case 502:
					err.message = '网关错误'
					break
				case 503:
					err.message = '服务不可用'
					break
				case 504:
					err.message = '网关超时'
					break
				case 505:
					err.message = 'HTTP版本不受支持'
					break
				default:
			}
		}
		message.error(err.message || 'Error')
		return Promise.reject(err) // 返回接口返回的错误信息
	}
)

export default service

2、对于封装的axios的使用

js 复制代码
import request from '@/utils/request'

export function login(data) {
	return request({
		url: '/qf-admin/user/login',
		method: 'post',
		data
	})
}
export function getInfo(params) {
	return request({
		url: '/qf-admin/user/info',
		method: 'get',
		params
	})
}

以上封装可直接粘贴到代码中进行使用

相关推荐
小镇程序员4 小时前
vue2 src自定义事件
前端·javascript·vue.js
AlgorithmAce6 小时前
Live2D嵌入前端页面
前端
nameofworld6 小时前
前端面试笔试(六)
前端·javascript·面试·学习方法·递归回溯
前端fighter6 小时前
js基本数据新增的Symbol到底是啥呢?
前端·javascript·面试
GISer_Jing7 小时前
从0开始分享一个React项目:React-ant-admin
前端·react.js·前端框架
川石教育7 小时前
Vue前端开发子组件向父组件传参
前端·vue.js·前端开发·vue前端开发·vue组件传参
GISer_Jing7 小时前
Vue前端进阶面试题目(二)
前端·vue.js·面试
乐闻x8 小时前
Pinia 实战教程:构建高效的 Vue 3 状态管理系统
前端·javascript·vue.js
weixin_431449688 小时前
web组态软件
前端·物联网·低代码·编辑器·组态
橘子味小白菜8 小时前
el-table的树形结构后端返回的id没有唯一键怎么办
前端·vue.js