目录

  • 前言
  • 正文
    • 安装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

封装请求api

1. 在src目录下新建个api目录,里面放请求相关的文件,新建request.js文件,首先引入axios
import axios from 'axios';
2. 创建一个axios实例
// request.js
// 创建新的axios实例
const service = axios.create({// 环境变量,需要在.env文件中配置baseURL: process.env.VUE_APP_BASE_API,// 超时时间暂定5stimeout: 5000,
});
3. axios请求拦截器

config里面配置请求前的一些处理,例如:数据转化,配置请求头,设置token,设置loading等,根据需求去添加

// request.js
service.interceptors.request.use(config => {// 此处添加Loadingreturn config;},error => {return Promise.reject(error);}
);

接下来加入Loading,使用了vant组件的Toast提示,所以先引入vant,其他UI库同理

# Vue 3 项目,安装最新版 Vant
npm i vant
# 通过 yarn 安装
yarn add vant
// request.js
// 使用vant组件的Toast提示,import引入要放在项目最上方
import { showToast, showLoadingToast, closeToast, setToastDefaultOptions } from 'vant';
import 'vant/es/toast/style';
//显示持续时长
setToastDefaultOptions({ duration: 3000 }); // loading 次数
let loadingCount = 0;service.interceptors.request.use(config => {// 加入LoadingshowLoadingToast({message: '加载中...',//禁止背景点击forbidClick: true,});loadingCount++;return config;},error => {return Promise.reject(error);}
);
4. axios响应拦截器
// request.js
service.interceptors.response.use(response => {// 关闭loadingloadingCount--;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);}
);
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);});});}
};
6. 最后导出函数方法
// request.js
export default Request;

使用方式

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

然后在项目中引入

import { getXXX, postXXX } from "./api/index";
getXXX().then(res => {// ...
});
let params = {pageNum: 1,pageSize: 10,
};
postXXX(params).then(res => {// ...
});
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 => {// ...
});;

总结

本文通过vue3+vant4的项目例子介绍了如何在项目里封装axios请求,其实vue2里面写法也类似,axios封装没有一个绝对的标准,需要结合项目中实际场景来设计。

如果此篇文章对您有帮助欢迎您【点赞】,也欢迎您【评论】+【收藏】!


扩展阅读

  1. Axios中文文档
  2. Vant4 Toast

axios封装—vue3项目相关推荐

  1. 【Vue】新建一个Vue3项目

    目录 1.新建vue项目 2.路径更改至新建的vue项目处 3.安装cnpm 4.cnpm安装vant3 5.安装babel-plugin 6.安装vue路由 7.安装axios 其他注意事项 仅用于 ...

  2. vite + vue3 + 封装axios + 封装loading + 封装返回顶部

    前言 ​前期回顾    ​ vite + vue3 + ts配置<企业级项目>二次封装el-table.分页_0.活在风浪里的博客-CSDN博客封装的功能有哪些?分页.表格排序.文字居中. ...

  3. vue-cli4+vant+rem+sass+vuex+axios封装+webpack搭建移动端项目

    h5移动端项目模板 基于 vue-cli4.0 + webpack 4 + vant ui + sass+ rem 适配方案+axios 封装,构建手机端模板脚手架 启动项目 git clone ht ...

  4. Vue3项目搭建学习笔记

    Vue3项目搭建学习笔记 参考王红元老师vue课程 创建项目 vue create vue3-ts-cms 项目搭建规范 集成editorconfig配置 VSCode需要安装一个插件:EditorC ...

  5. Vue3项目技巧(更新中ing)

    文章目录 axios封装 http.js testAPI.js main.js测试 如果项目中需要多个baseURL 自动导入scss文件 案例文件 使用案例 引入aliyun图标库 先看效果 查看官 ...

  6. axios post body参数_Vue开发中的一些问题(axios封装)

    关于Vue开发的问题(axios封装) 在博客中查找vue的axios封装,发现其中案例还是很多的,自己项目中有些需求不够. 比如 1.Content-Type 请求头 application/x-w ...

  7. vue中将axios封装

    在平时写项目中,经常会遇到组件调用同一个接口或者不同接口 import axios from "axios"axios({url: "https://autumnfish ...

  8. vue axios封装 获取微信公众号用户的openid

    目录 axios封装 openid vue vue+ts axios封装 一般会在项目的src目录中,新建一个文件夹,作为网络请求模块,用来封装axios, 创建axios实例: axios.crea ...

  9. vue中axios封装请求

    执行 GET 请求 // 向具有指定ID的用户发出请求 axios.get('/user?ID=12345') .then(function (res) {console.log(res); }) . ...

最新文章

  1. 【PC工具】网站服务器端口检测工具,网络端口扫描工具,win10telnet安装方法
  2. 计算机内存与内置类型,笔记本内存种类有哪些 笔记本常见内存类型介绍
  3. codeforces 940E Cashback 有趣的dp
  4. Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解
  5. properties配置文件的加密
  6. (软件工程复习核心重点)第六章实现和测试习题
  7. 动力环境监控系统论文_机房动力环境监控系统方案
  8. js 能实现监听F5页面刷新子iframe 而父页面不刷新
  9. 使用using关键字来自动清除对象资源
  10. java vector pair_STL: list ,set ,pair.map的使用
  11. php v9搜索不到内容,關於如何解決PHPCMS V9內容搜索顯示不全問題解決方案
  12. vue输入空格符 以及空字符串在页面不显示或者只显示一个的问题
  13. 睡眠有助于巩固复杂问题解决技能的记忆痕迹
  14. 1004: 惠民工程 (2013年中南大学研究生复试机试 )
  15. 大公司用的企业网盘哪个好
  16. php接口链接浏览器打开很快php很慢,php不管curl还是file_get_contents请求接口都很慢,但直接在浏览器里访问就很快,这是说明情况?...
  17. 前端实现文件上传的断点续传
  18. 计算机毕业设计SSM大学生二手物品交易网站【附源码数据库】
  19. 足球点球 html5,疯狂的点球(5-1)
  20. LabVIEW范例无法打开解决办法

热门文章

  1. android培训之android下大文件分割上传(摘自达内总部)
  2. Android屏幕尺寸适配常见方案smallestWidth
  3. echart 页面跳转_echarts3地图实现点击某省市区域跳转到相应页面
  4. Excel操作:使用offset函数让数据透视表动态更新
  5. 浅谈 Android 娱乐直播/游戏特殊音效如何实现
  6. Django--在线相册管理系统(1)
  7. 1901年-2020年全球气象数据 CRU TS 介绍、下载与使用教程
  8. 不忘初心,做一行爱一行
  9. 护理业务查房PPT模板
  10. HIT软件构造Lab1--过程分析