axios统一封装规范管理

新建/api/

1.新建统一处理文件/api/axios.ts

javascript 复制代码
import axios from "axios"

const http = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL, // 从环境变量读取
  timeout: 10000,
});

// 请求拦截器(如添加 Token)
http.interceptors.request.use((config) => {
  const token = localStorage.getItem("token");
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

// 响应拦截器(统一处理错误和返回数据)
http.interceptors.response.use(
  (response) => {
    // 如果后端返回 { code, data, message } 格式
    if (response.data.code !== 200) {
      return Promise.reject(response.data.message); // 业务错误
    }
    return response.data.data; // 直接返回有效数据
  },
  (error) => {
    // HTTP 错误(如 401、404、500)
    const errorMessage = error.response?.data?.message || error.message;
    console.error("API Error:", errorMessage);
    return Promise.reject(errorMessage);
  }
);

export default http;

2.其他api:/api/user.ts

javascript 复制代码
// src/api/user.ts
import http from "./axios";

export const login = (data: { username: string; password: string }) => {
  return http.post("/auth/login", data);
};

export const getUserInfo = (userId: number) => {
  return http.get(`/user/${userId}`);
};
javascript 复制代码
import http from "./axios";

export const getProductList = (params: { page: number; size: number }) => {
  return http.get("/products", { params });
};

3.在组件中使用

css 复制代码
<script setup>
import { getUserInfo } from "@/api/user";
import { getProductList } from "@/api/product";

const fetchData = async () => {
  try {
    const user = await getUserInfo(1);
    const products = await getProductList({ page: 1, size: 10 });
  } catch (error) {
    console.error("请求失败:", error);
  }
};
</script>
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A4 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
honkun64 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端