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
	})
}

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

相关推荐
小徐不会敲代码~6 分钟前
Vue3 学习
前端·javascript·vue.js·学习
大猩猩X8 分钟前
vue vxe-gantt table 甘特图实现多个维度视图展示,支持切换年视图、月视图、周视图等
前端·javascript·甘特图·vxe-table·vxe-ui
m0_740043738 分钟前
Element-UI 组件库的核心组件及其用法
前端·javascript·vue.js·ui·elementui·html
向上的车轮13 分钟前
从“能用”到“好用”:基于 DevUI 构建高维护性、多端自适应的企业级前端架构实践
前端·架构
脾气有点小暴24 分钟前
H5 跳转方式
前端·javascript
ghfdgbg26 分钟前
11. 后端Web实战:登录认证(令牌 + 过滤器 + 拦截器)
前端
Doris89333 分钟前
【JS】JS进阶--作用域、函数、解构赋值、数组方法
开发语言·前端·javascript
黑客思维者33 分钟前
核弹级漏洞突袭React生态:RSC反序列化何以成为RCE通道?
前端·javascript·react.js·远程代码执行漏洞
K3v37 分钟前
【npm install sentry/cli】安装这个破包一直失败
前端·npm·sentry
山峰哥42 分钟前
现代 C++ 的炼金术:铸就高性能与高可维护性的工程实践
java·开发语言·前端·数据结构·c++