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 ...
随机推荐
- JMeter 逻辑控制之IF条件控制器
逻辑控制之IF条件控制器 测试环境 JMeter-5.4.1 循环控制器介绍 添加While Controller 右键线程组->添加->逻辑控制器->While控制器 控制器面板介 ...
- Git 克隆仓库报unable to get local issuer certificate错误解决方法
Git 克隆仓库报unable to get local issuer certificate错误解决方法 By:授客 QQ:1033553122 问题描述 克隆gitlab上的仓库,报错,如下 $ ...
- 【服务器】Ubuntu虚拟内存设置
引子 最近服务器内存老是爆掉,64G的内存对于四五个人同时使用还是有点勉强,上网查询了一下虚拟内存的教程,本博客记录一下方法. swap内存设置 假设你想将swap文件放在/mnt/data/mem目 ...
- 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch
title: 服务端渲染中的数据获取:结合 useRequestHeaders 与 useFetch date: 2024/7/24 updated: 2024/7/24 author: cmdrag ...
- httpURLConnection 请求发起post请求
常见请求头,在post请求之 前先了解一下,请求相关的基础 关于post 请求的方式比get 多了很多配置,其实大致一样,本想将get示例和post写在一起,这个博客功能有时有问题 一直在灰色的编辑 ...
- springsecurity使用:登录与校验
首先是引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 【DataBase】MySQL 04 图形化用户界面管理工具
参考至视频:P16 - P18 https://www.bilibili.com/video/BV1xW411u7ax?p=82 SQL图形化界面管理工具 - SQLyog 随便找的一个下载地址[安装 ...
- 【DataBase】MySQL 07 SQL函数 单行函数其一 字符函数
SQL函数的概念 -- SQL函数 -- 概念:类似Java的方法,将已经定义好的不再改变的逻辑语句封装在函数体内,对外提供方法的标识 -- 隐藏了实现细节,提高功能的可重用 -- SELECT 函数 ...
- 【Spring】09 后续的学习补充 vol3
原生JDBC事务: package dao; import cn.dzz.util.DruidUtil; import org.apache.commons.dbutils.QueryRunner; ...
- vue前端自适应布局,一步到位所有自适应
vue前端自适应布局,一步到位所有自适应 页面展示 实现内容 1,左右布局 左侧固定宽带,右侧自适应剩余的宽度. 中间一条分割线,可以拖拉,自适应调整左右侧的宽度. 左侧的高度超长自动出现横向滚动条, ...