axios 安装和封装

安装

npm install axios

最后通过 axios 测试接口!!!

axios 二次封装

在开发项目的时候避免不了与后端进行交互,因此我们需要使用 axios 插件实现发送网络请求。在开发项目的时候

我们经常会把 axios 进行二次封装。

目的:

1:使用请求拦截器,可以在请求拦截器中处理一些业务(开始进度条、请求头携带公共参数)

2:使用响应拦截器,可以在响应拦截器中处理一些业务(进度条结束、简化服务器返回的数据、处理 http 网络错误)

在根目录下创建 utils/request.ts

// 进行axios二次封装:使用请求与响应拦截器
// 引入axios和axios的类型定义
import axios, {
AxiosInstance,
InternalAxiosRequestConfig,
AxiosResponse,
} from "axios";
import { ElMessage } from "element-plus";
//第一步:利用axios对象的create方法,去创建axios实例(其他的配置:基础路径、超时的时间)
const request: AxiosInstance = axios.create({
//基础路径
baseURL: import.meta.env.VITE_APP_BASE_API, //基础路径上会携带/api
timeout: 5000, //超时的时间的设置
});
//第二步:request实例添加请求与响应拦截器
request.interceptors.request.use(
(config: InternalAxiosRequestConfig) => {
//config配置对象,headers属性请求头,经常给服务器端携带公共参数
//返回配置对象
return config;
},
(error: any) => {
// 处理请求错误
console.error(error);
return Promise.reject(error);
}
); //第三步:响应拦截器
request.interceptors.response.use(
(response: AxiosResponse) => {
//成功回调
//简化数据
return response.data;
},
(error) => {
// 处理响应错误
//失败回调:处理http网络错误的
//定义一个变量:存储网络错误信息
let message = "";
//http状态码
const status = error.response.status;
switch (status) {
case 401:
message = "TOKEN过期";
break;
case 403:
message = "无权访问";
break;
case 404:
message = "请求地址错误";
break;
case 500:
message = "服务器出现问题";
break;
default:
message = "网络出现问题";
break;
}
//提示错误信息
ElMessage({
type: "error",
message,
});
return Promise.reject(error);
}
);
//对外暴露
export default request;

使用

src\api\user\index.ts

// 引入封装好的axios实例
import request from "@/utils/request"; // 定义一个接口,用于规范用户的数据类型
interface User {
id: number;
name: string;
age: number;
email: string;
avatar: string;
} // 定义一个函数,用于获取用户列表
export function getUserList(): Promise<User[]> {
return request({
url: "/user/list",
method: "get",
});
}

测试代码

import { onMounted } from "vue";
import { getUserList } from "@/api/user";
//组件挂载完毕
onMounted(() => {
getUserLists();
});
//获取全部已有的用户信息
const getUserLists = async () => {
let result = await getUserList();
console.log(result);
};

API 接口统一管理

在 src 目录下去创建 api 文件夹去统一管理项目的接口;

比如:下面方式

// responseTpe.ts
// 定义一个接口,用于规范响应数据的格式
export interface ResponseData<T = any> {
code: number;
data: T;
message: string;
}
// type.ts
import type { ResponseData } from "@/api/responseTpe"; // 定义一个接口,用于规范用户的数据类型
export interface userInfoListReponseData extends ResponseData {
data: {
id: number;
name: string;
age: number;
email: string;
avatar: string;
};
}
// index.ts
// 引入封装好的axios实例
import request from "@/utils/request"; import type { userInfoListReponseData } from "./type"; //项目用户相关的请求地址
enum API {
USERINFO_LIST_URL = "/user/list",
} // 用于获取用户列表
export const getUserList = () => {
return request.get<any, userInfoListReponseData>(API.USERINFO_LIST_URL);
};

Vue3——axios 安装和封装的更多相关文章

  1. 原生 Ajax 封装 和 Axios 二次 封装

    AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...

  2. 【vue】axios二次封装,更好的管理api接口和使用

    在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...

  3. 十. Axios网络请求封装

    1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...

  4. 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理

    在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...

  5. 实战进阶 Vue3+Axios+pinia

    实战进阶 Vue3+Axios+pinia 创建文件utils/request.js import Axios from 'axios'; export const request = Axios.c ...

  6. 关于axios的一些封装

    关于Axios的封装 为何需要在封装 应用场景,项目中涉及100个AJAX请求,其中: 1.其中60个需要在请求头header设置token headers: {token: token}用于权限校验 ...

  7. axios 二次封装

    一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等 案例 ./service/axios.js 1234567891011121314151617181920212223242 ...

  8. vue3.0安装

    一 .vue3.0安装 vue3.0安装 个人推荐以下2种 (1). 开发工具的对应代码中 插入CDN <script src="https://unpkg.com/vue@next& ...

  9. axios请求的封装

    /* axios的请求封装 */         //axios的原生写法get,post请求         //第一个参数为请求地址,第二个参数为请求的参数,params是将参数拼接在url的后面 ...

  10. vue3.0+axios 跨域+封装

    封装: 目录结构:src/utils/request.js, 没有就自己建一个 //src/utils/request.jsimport axios from 'axios' import { Mes ...

随机推荐

  1. ElementUI 基于vue+sortable.js实现表格行拖拽

    基于vue+sortable.js实现表格行拖拽 By:授客 QQ:1033553122 实践环境 sortablejs@1.13.0 vue@2.6.11 element-ui@2.13.2 安装s ...

  2. lambda表达式用法

    (参数列表)->{代码块}; (int a,int b)->{return a+b;}; 本质为匿名函数 参数的类型可以省略: (a,b)->{return a+b;} 当参数只有一 ...

  3. 如何在AS中实现mysql查询并输出在视图上

    新建子线程启用mysql new Thread(){ @override public void run(){ //在这里进行数据库调用 } }.start(); handler简单使用方法 hand ...

  4. 解决SpringMVC/SpringBoot @RequestBody无法注入基本数据类型

    我们都知道SpringMVC使用 @RequestBody 注解可以接收请求content-type 为 application/json 格式的消息体.但是我们必须使用实体对象,Map或者直接用St ...

  5. python adb 安卓app性能测试

    主要是进行cpu.内存.冷启动.热启动.流量.电量的监测 可获取到相关数据,同竞类产品对比,或者同版本对比 cpustatus adb命令:adb shell "dumpsys cpuinf ...

  6. 【Tool】常用软件地址(装机备用)

    浏览器: 360极速 https://browser.360.cn/ee/ 谷歌 https://www.google.cn/chrome/ 社交通讯 微信 https://weixin.qq.com ...

  7. 一个好主板对CPU超频的现实意义————一次超频经历 (z390ws华硕工作站主板+i7-9700k CPU ,Ubuntu18.04.5系统,8核心超频 5.2Ghz以上,单核心满负荷运转可以稳定运行10多分钟后才重启)

    本人于今年2020年1月份在某宝上购买了一款workstation主板,也就是工作站主板,传说中的华硕Z390WS主板(购入价格为3900元),由于当时手里有些小钱,又弄了一个大蝴蝶1350w的电源( ...

  8. (待续)【转载】 Deep Reinforcement Learning Doesn't Work Yet(这里有一篇深度强化学习劝退文)

    原文: https://www.alexirpan.com/2018/02/14/rl-hard.html ============================================== ...

  9. aarch64架构CPU下Ubuntu系统环境源码编译pytorch-gpu-2.0.1版本

    准备事项: 1. pytorch源码下载: 源码的官方地址: https://github.com/pytorch/pytorch 但是这里我们不能简单的使用git clone命令下载,因为pytor ...

  10. 聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景解决方案

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群.   性能在数据分析中至关重要,它直接决定数据处理的效率与及时性,进一步对数据驱动的企业决策造成影响.   举个例 ...