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

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

相关推荐
灰小猿7 小时前
Spring前后端分离项目时间格式转换问题全局配置解决
java·前端·后端·spring·spring cloud
im_AMBER8 小时前
React 16
前端·笔记·学习·react.js·前端框架
02苏_8 小时前
ES6模板字符串
前端·ecmascript·es6
excel8 小时前
⚙️ 一次性警告机制的实现:warnOnce 源码深度解析
前端
excel8 小时前
Vue SFC 样式编译核心机制详解:compileStyle 与 PostCSS 管线设计
前端
excel8 小时前
🧩 使用 Babel + MagicString 实现动态重写 export default 的通用方案
前端
excel8 小时前
Vue SFC 编译器主导出文件解析:模块组织与设计哲学
前端
excel8 小时前
深度解析:Vue SFC 模板编译器核心实现 (compileTemplate)
前端
excel8 小时前
Vue SFC 解析器源码深度解析:从结构设计到源码映射
前端
excel8 小时前
Vue SFC 编译全景总结:从源文件到运行时组件的完整链路
前端