Vue项目使用axios对请求方法二次封装
网上对于vue项目中axios请求二次封装的案例真的有很多,有非常好用的,为什么要封装呢?在项目中封装请求有什么好处呢?1、为了适配自己的项目、2、为了减少重复的代码、3、… 一堆优点. 下面就分享一下我这边在项目中是如何根据自己的项目使用axios对请求方法二次封装的。
下面根据这四个步骤给大家一一分享
- 1、根目录创建 config/index.js
- 2、根目录创建 utils/request.js
- 3、main.js文件 挂载request全局方法
- 4、页面调用
step1: 创建 config/index.js 文件 => 全局配置请求url
//获取项目当前的开发环境,根据不同的值适配对应的 API请求地址
const env = import.meta.env.MODE || 'prod'
const EnvConfig = {
dev: {
baseApi: '/',
mockApi: 'https://www.fastmock.site/mock/***/api'
},
test: {
baseApi: '',
mockApi: 'https://www.fastmock.site/mock/***/api'
},
prod: {
baseApi: '',
mockApi: 'https://www.fastmock.site/mock/***/api'
}
}
export default {
env: 'dev',
mock: true,
namespace: 'manager',
...EnvConfig[env]
}
step2: 根目录创建 utils/request.js. => 请求处理都在这里哦
import axios from 'axios'
import config from './../config'
import { ElMessage } from 'element-plus'
import router from './../router'
const TOKEN_INVALID = 'Token认证失败,请重新登陆'
const NETWORK_ERROR = '网络请求异常,请稍后重试'
// 创建axios实例对象,添加全局配置
const service = axios.create({
baseURL: config.baseApi,
timeout: 8000
})
//请求拦截
service.interceptors.request.use((req) => {
// TO-DO
const headers = req.headers
if (!headers.Authorization) {
headers.Authorization = 'Bear Jack'
}
return req
})
//响应拦截
service.interceptors.response.use((res) => {
// TO-DO
const {code, data, msg} = res.data
if(code === 200){
return data
} else if(code === 40001) {
ElMessage.error(TOKEN_INVALID)
setTimeout(() => {
router.push('./login')
}, 1500)
return Promise.reject(TOKEN_INVALID) //抛出异常
} else {
ElMessage.error(msg || NETWORK_ERROR)
return Promise.reject(msg || NETWORK_ERROR) //抛出异常
}
})
/**
* 请求核心函数
* @param {*} options 请求配置
*/
function request(options) {
options.method = options.method || 'get'
// 防止大小写混乱
if(options.method.toLowerCase() === 'get') {
options.params = options.data;
}
// 保证线上的环境不是mock数据,防止意外
if(config.env === 'prod'){
service.defaults.baseURL = config.baseURL
} else {
service.defaults.baseURL = config.mock ? config.mockApi : config.baseApi
}
return service(options)
}
['get', 'post', 'put', 'delete', 'patch'].forEach(item => {
request[item] = (url, data, options) => {
return request({
url,
data,
method: item,
...options
})
}
})
export default request
上面就是所以的请求封装的代码,每一个模块都有注视,大家也可以根据自己的项目文档做不同的调整。
step3: main.js文件 挂载request全局方法
上面两部的任务如果都顺利的完成了,到了最后一步就是把封装好的请求方法挂载到全局。
引入封装好的文件
import request from './utils/request.js'
挂载到全局的方法$request
const app = createApp(App)
app.config.globalProperties.$request = request
app.use(router).use(ElementPlus).mount('#app')
step4: 页面上如何调用
上面的操作如果没有bug,全部顺利那面页面上我们就非常方便的就可以使用了。
this.$request.get('/login', {name: 'jack'}, {mock: true, loading: true}).then(res => {
console.log(res)
})
接下来打开控制台我们就可以看到接口返回的数据了❤️
这个封装大大减少了冗余代码的出现,提高了我们的开发效率,所以项目中框架搭建方法封装非常重要。今天分享到这里了,大家共勉。
关于Vue的学习给大家推荐有关vue3的最新课程吧。
- 1、 《 Vue3+ElementPlus+Koa2 全栈开发后台系统 》 百度网盘
- 2、 《 Vue3 系统入门与项目实战 完整版 》 百度网盘
- 3、 《 Vue3.0+TS打造企业级组件库 前端中高级开发者必修课 》 完整无秘
跟着前辈们学习到的不仅仅是API的使用,更是做项目的思维,方法。加油~






















