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. Java基础 韩顺平老师的 集合 的部分笔记

    498,集合介绍 499,集合体系图(两个图背下) package com.hspedu.collection; import java.util.ArrayList; import java.uti ...

  2. 单细胞测序最好的教程(十四)测序原始数据公开至NCBI数据库

    作者按 国内对于单细胞测序相关的中文教程确实不够全面,当然NCBI官网给的上传教程也比较详细了,所以变成了会者不难.本教程你现在可能用不上,但是你如果做单细胞测序,那么未来你一定会用上,建议收藏. 在 ...

  3. 【WebSocket】一个简单的前后端交互Demo

    WebSocket资料参考: https://www.jianshu.com/p/d79bf8174196 使用SpringBoot整合参考: https://blog.csdn.net/KeepSt ...

  4. (续) python 中 ctypes 的使用尝试

    内容接前文: https://www.cnblogs.com/devilmaycry812839668/p/15032493.html ================================ ...

  5. A100和H100两款NVIDIA顶级双精度浮点数矢量运算芯片被限制对华出口——警醒

    美国东部时间8月31日,NVIDIA公司宣布收到美政府通知停止对中国出口A100和H100两款NVIDIA顶级双精度浮点数矢量运算芯片,并且未来计算性能和数据传输性能高于A100的芯片都将禁止对中国出 ...

  6. vscode设置字体大小

    1.背景 2.设置编辑器字体大小 3.设置窗口字体大小 完美!

  7. mybatis-plus系统化学习之配置精讲

    1.背景 mybatis-plus给出了很多配置, 大部分的配置使用默认的就可以了, 但是还是有很多需要的配置比如: # mybatis-plus相关配置 mybatis-plus: # xml扫描, ...

  8. js 实现俄罗斯方块(一)

    上学的时候就想尝试写个游戏了,不过那时一直想的都是些不太切合自身能力的高级游戏(需要花很多时间学习引擎,需要美工等等)最终都没有实现. 最近突然又想写了就利用业余时间写了个俄罗斯方块js写的画面也比较 ...

  9. 使用 navigateTo 实现灵活的路由导航

    title: 使用 navigateTo 实现灵活的路由导航 date: 2024/8/13 updated: 2024/8/13 author: cmdragon excerpt: 摘要:本文详细介 ...

  10. MessageBox弹出后无响应

    这几天学习了自定义模板对话框类,就是说不用系统定义的模板对话框类来创建对话框 消息处理就不用返回0了,可直接返回DefWindowProc HINSTANCE hInstance = ::GetMod ...