当前位置: 首页 > article >正文

vue axios请求二次封装以及解释(直接cv实用版)

vue axios请求封装

用来总结和学习,便于自己查找

文章目录

              一、为什么使用请求统一封装?
              二、 安装 Axios?
              三、创建 Axios 封装文件 ?
          3.1 重要代码
              四、在 Vue 项目中如何使用封装好Axios?

一、为什么使用请求统一封装?
1. 减少重复代码
请求的 baseURL、超时设置、请求头处理(如 token 认证)、错误处理等。通过统一封装,这些公共逻辑只需编写一次,在需要请求时直接调用封装后的接口即可,大大减少了重复代码。

2. 集中管理
统一封装请求后,所有的请求配置、拦截器、错误处理逻辑都可以集中管理。当 API 变化时,或者需要对请求逻辑做统一调整时,只需修改封装文件中的代码,避免了在各个组件中查找和修改的麻烦。

例如,后端 API 地址变化了,只需修改封装文件中的 baseURL,而不需要修改每个 API 调用的地方。

3. 提高代码可维护性
通过请求的统一封装,所有 API 请求都集中到一处进行管理。在多人协作开发中,如果每个开发者都自己写请求逻辑,容易导致代码风格不一致、错误处理不统一等问题。统一封装能够提高代码的一致性、可维护性,方便后期调试和维护。

4. 统一错误处理
在请求拦截器中,可以统一处理不同的 HTTP 响应状态码(如 401 未授权、500 服务器错误等),给用户友好的提示,避免在各个组件中重复编写相同的错误处理逻辑。比如,401 未认证时,可以统一跳转到登录页。

二、安装 Axios?
npm install axios

三、创建 Axios 封装文件 ?

在这里插入图片描述

3.1 重要代码

代码有注释

// utils/request.js
import axios from 'axios';
import { Message } from 'element-ui'; // 引入 Element UI 的消息组件

// 创建 axios 实例
const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 5000,
});

// 请求拦截器
instance.interceptors.request.use(config => {
  // config.headers['Authorization'] = localStorage.getItem('token');
  return config;
}, error => {
  Message.error('请求错误: ' + error.message); // 替换为 Element UI 消息提示
  return Promise.reject(error);
});

// 响应拦截器
instance.interceptors.response.use(
  response => {
    const data = response.data;
    if (data && !data.Status) { // 判断 Status 是否为 false
      Message.error(`Error: ${data.Message || 'Unknown error'}`); // 使用 Element UI 消息提示
      return data;;
    } else {
      return data; // 返回整个响应数据
    }
  },
  error => {
    if (error.response) {
      // 处理服务器返回的错误响应
      Message.error(`Error code ${error.response.status}: ${error.response.statusText}`);
    } else {
      // 处理网络问题
      Message.error('No response from server');
    }
    return Promise.reject(error);
  }
);

export default instance;

四、在 Vue 项目中如何使用封装好Axios?

再建一个api文件引入前面封装的

1、api.js

import request from '../utils/request';

export function GetBedInfo(params) {
    return request({
        url: '',
        method: 'get',
        params,
    });
}

2、组件里面使用

async buildings1() {
      try {
        const data = {
          action: "GetBedInfo",
          supplier_id: "参数",
        };
        const response = await GetBedInfo(data);
        if (response.Status) {
          console.log("this.dataList", response.Result)
          this.dataList = response.Result;
      } catch (error) {
        // console.error('Registration error:', error);
      }
    },

process.env.VUE_APP_BASE_API这个就是后端的地址,我讲过配置环境变量可以自己找在之前的文章


http://www.kler.cn/news/366187.html

相关文章:

  • 文件下载漏洞
  • 语音提示器-WT3000A离在线TTS方案-打破语种限制/AI对话多功能支持
  • 二、Hadoop 基础知识综述
  • frida脚本,自动化寻址JNI方法
  • 机器学习与神经网络的当下与未来
  • 大语言模型推理源码解读(基于llama3模型)
  • kubenetes/kubesphere搭建报错
  • onlyoffice docker启用jwt并生成jwt
  • 机器学习与金融风控项目篇-day03-业务规则挖掘与特征构建-特征衍生
  • 探索 Lombok 的 @Builder 和 @SuperBuilder:避坑指南(一)
  • Windows10搭建Spark3.4.3安装教程
  • OAK相机的RGB-D彩色相机去畸变做对齐
  • 【动态规划】【简单多状态dp问题】买卖股票相关问题(冷冻期、手续费、限制次数)
  • MATLAB基础应用精讲-【数模应用】本量利分析(Cost-Volume-Profit Analysis)
  • 【论文阅读】ESRGAN+
  • 项目管理软件中这6个小技巧帮助项目经理同时管理多个项目
  • 水轮发电机油压自动化控制系统解决方案介绍
  • LDR6020:为VR串流线方案注入高效能与稳定性
  • 多台NFS客户端访问一台nfs服务器
  • vitepress一键push和发布到github部署网站脚本
  • spring整合使用xml方式整合Druid数据源连接池
  • 邮件系统SSL加密传输,保护你的电子邮件免受网络威胁
  • 基于SSM考研助手系统的设计
  • 小白对时序数据库的理解
  • 视频美颜平台是如何搭建的?基于直播美颜SDK源码的开发技术详解
  • 推荐一款三维数值建模软件:3DEC