Vue3——axios 安装和封装
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 安装和封装的更多相关文章
- 原生 Ajax 封装 和 Axios 二次 封装
AJAX 异步的JavaScript与XML技术( Asynchronous JavaScript and XML ) Ajax 不需要任何浏览器插件,能在不更新整个页面的前提下维护数据,但需要用户允 ...
- 【vue】axios二次封装,更好的管理api接口和使用
在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ...
- 十. Axios网络请求封装
1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...
- 基于SqlSugar的开发框架循序渐进介绍(10)-- 利用axios组件的封装,实现对后端API数据的访问和基类的统一封装处理
在SqlSugar的开发框架的后端,我们基于Web API的封装了统一的返回结果,使得WebAPI的接口返回值更加简洁,而在前端,我们也需要统一对返回的结果进行解析,并获取和Web API接口对应的数 ...
- 实战进阶 Vue3+Axios+pinia
实战进阶 Vue3+Axios+pinia 创建文件utils/request.js import Axios from 'axios'; export const request = Axios.c ...
- 关于axios的一些封装
关于Axios的封装 为何需要在封装 应用场景,项目中涉及100个AJAX请求,其中: 1.其中60个需要在请求头header设置token headers: {token: token}用于权限校验 ...
- axios 二次封装
一般项目往往要对 axios 库进行二次封装,添加一些自定义配置和拦截器等 案例 ./service/axios.js 1234567891011121314151617181920212223242 ...
- vue3.0安装
一 .vue3.0安装 vue3.0安装 个人推荐以下2种 (1). 开发工具的对应代码中 插入CDN <script src="https://unpkg.com/vue@next& ...
- axios请求的封装
/* axios的请求封装 */ //axios的原生写法get,post请求 //第一个参数为请求地址,第二个参数为请求的参数,params是将参数拼接在url的后面 ...
- vue3.0+axios 跨域+封装
封装: 目录结构:src/utils/request.js, 没有就自己建一个 //src/utils/request.jsimport axios from 'axios' import { Mes ...
随机推荐
- 从Mybatis-Plus开始认识SerializedLambda
从Mybatis-Plus开始认识SerializedLambda 背景 对于使用过Mybatis-Plus的Java开发者来说,肯定对以下代码不陌生: @TableName("t_user ...
- ngnix简介和基础
一.Nginx简介 Nginx 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器 是一个模块化软件 [1].安装nginx 使用源码包编译安装 cd /opt ...
- laravel6学习
web 服务器需要拥有 storage 目录下的所有目录和 bootstrap/cache 目录的写权限
- Cloudflare教程:如何注册账户、购买域名、开启免费CDN服务?
Cloudflare介绍 什么是Cloudflare Cloudflare是一家总部位于旧金山的美国跨国科技企业,以向客户提供基于反向代理的内容分发网络(CDN)及分布式域名解析服务为主要业务. 目前 ...
- adb shell 批处理文件
adb shell 批处理文件 手机截屏,并把图片传到电脑
- ClickHouse的向量处理能力
ClickHouse的向量处理能力 引言 在过去,非结构化数据(如文本.图片.音频.视频)通常被认为难以在数据库中直接使用,因为这些数据类型的多样性和复杂性.然而,随着技术的发展,嵌入技术可以将非结构 ...
- 【Java】在树结构中给节点追加数据
一.功能需求 有个树状组件,展示区域层级,每个区域节点需要展示该地区下的统计信息 从来没做过,给我整不会了属实是 二.功能分析 原型有功能和老系统代码,查看源码后发现的结构框架 1.树组件是自己用ul ...
- 什么是3D扫描技术?
相关: https://www.bilibili.com/video/BV1fN4y1z7uD/?vd_source=f1d0f27367a99104c397918f0cf362b7 接触式:就是使用 ...
- 【转载】 固定随机种子比较强化学习算法——pytorch框架
原文地址: https://www.cnblogs.com/lucifer1997/p/13801102.html ========================================== ...
- CPU利用率为多少时可以兼顾计算效率和时间效率?—— 75% —— 科学计算时如何正确的使用超线程CPU——使用超线程CPU进行计算密集型任务时的注意事项
2023年12月28日 更新 现在这个AI火热的时代科学计算任务占比越来越大,但是平时使用时也有一些不为人注意的地方需要知道,本文就讨论一下使用超线程CPU时的注意事项. 超线程CPU就是现在的多线 ...