axios封装—vue3项目
admin 阅读: 2024-03-29
后台-插件-广告管理-内容页头部广告(手机) |
目录
- 前言
- 正文
- 安装axios
- 封装请求api
- 1. 在src目录下新建个api目录,里面放请求相关的文件,新建`request.js`文件,首先引入`axios`
- 2. 创建一个`axios`实例
- 3. axios请求拦截器
- 4. axios响应拦截器
- 5. 封装请求函数,可以根据项目实际情况处理参数(此处仅处理了get与post请求)
- 6. 最后导出函数方法
- 使用方式
- 1. 可以将接口全部定义在一个文件内(方便管理)
- 2. 另一种写法是直接在项目内使用
- 总结
- 扩展阅读
前言
axios的API很友好,可以在项目中直接使用。但是在大型项目中,http请求很多,且需要区分环境, 每个网络请求有相似需要处理的部分,会导致代码冗余,破坏工程的可维护性,扩展性,所以需要对axios请求进行相应的封装
正文
安装axios
# npm 安装 npm install axios # yarn 安装 yarn add axios- 1
- 2
- 3
- 4
封装请求api
1. 在src目录下新建个api目录,里面放请求相关的文件,新建request.js文件,首先引入axios
import axios from 'axios';- 1
2. 创建一个axios实例
// request.js // 创建新的axios实例 const service = axios.create({ // 环境变量,需要在.env文件中配置 baseURL: process.env.VUE_APP_BASE_API, // 超时时间暂定5s timeout: 5000, });- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3. axios请求拦截器
// request.js service.interceptors.request.use( config => { // 此处添加Loading return config; }, error => { return Promise.reject(error); } );config里面配置请求前的一些处理,例如:数据转化,配置请求头,设置token,设置loading等,根据需求去添加
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
接下来加入Loading,使用了vant组件的Toast提示,所以先引入vant,其他UI库同理
# Vue 3 项目,安装最新版 Vant npm i vant # 通过 yarn 安装 yarn add vant- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
4. axios响应拦截器
// request.js service.interceptors.response.use( response => { // 关闭loading loadingCount--; if (loadingCount === 0) { closeToast(); } return response; }, error => { closeToast(); // 处理异常情况,根据项目实际情况处理或不处理 if (error && error.response) { // 根据约定的响应码处理 switch (error.response.status) { case 403: error.message = '拒绝访问'; break; case 502: error.message = '服务器端出错'; break; default: error.message = `连接错误${error.response.status}`; } } else { // 超时处理 error.message = '服务器响应超时,请刷新当前页'; } showToast(error.message); return Promise.resolve(error.response); } );- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
5. 封装请求函数,可以根据项目实际情况处理参数(此处仅处理了get与post请求)
// request.js const Request = (url, options = {}) => { let method = options.method || 'get'; let params = options.params || {}; if (method === 'get' || method === 'GET') { return new Promise((resolve, reject) => { service .get(url, { params: params, }) .then(res => { if (res && res.data) { resolve(res.data); } }) .catch(err => { reject(err); }); }); } else { return new Promise((resolve, reject) => { service .post(url, params) .then(res => { if (res && res.data) { resolve(res.data); } }) .catch(err => { reject(err); }); }); } };- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
6. 最后导出函数方法
// request.js export default Request;- 1
- 2
使用方式
1. 可以将接口全部定义在一个文件内(方便管理)
在request.js文件同级目录内新建index.js
// index.js import http from './request'; export function getXXX() { return http('/api/get'); } export function postXXX(params) { return http('/api/post', { method: 'POST', params: params, }); }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
然后在项目中引入
import { getXXX, postXXX } from "./api/index"; getXXX().then(res => { // ... }); let params = { pageNum: 1, pageSize: 10, }; postXXX(params).then(res => { // ... });- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2. 另一种写法是直接在项目内使用
import http from "./api/request"; http('/api/get').then(res => { // ... }); let params = { pageNum: 1, pageSize: 10, }; http('/api/post', { method: 'POST', params: params, }).then(res => { // ... });;- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
总结
本文通过vue3+vant4的项目例子介绍了如何在项目里封装axios请求,其实vue2里面写法也类似,axios封装没有一个绝对的标准,需要结合项目中实际场景来设计。
如果此篇文章对您有帮助欢迎您【点赞】,也欢迎您【评论】+【收藏】!
扩展阅读
- Axios中文文档
- Vant4 Toast
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |