vue3+ts+vite中封装axios,使用方法从0到1

一、安装axios

javascript 复制代码
npm install axios @types/axios --save

二、配置代理vite.config.ts,如果没有需要新建该文件

javascript 复制代码
module.exports = {
  server: {
    proxy: {
      '/api': {
        target: 'http://localhost:5000', // 设置代理目标
        changeOrigin: true, // 是否改变请求源地址
        rewrite: (path) => path.replace(/^\/api/, '') // 将 /api 替换为空字符串
      }
    }
  }
};

三、新建utils文件夹,在utils文件夹下新建http.ts文件和methods.ts,如图:


http.ts文件内容:

javascript 复制代码
import axios from 'axios';
import type  { AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios';

// 创建axios实例
const instance = axios.create({
   baseURL: '/api', // 设置API的基础URL
});

// 请求拦截器
instance.interceptors.request.use(
   (config: AxiosRequestConfig):any => {
      // 可在请求发送前对config进行修改,如添加请求头等
      const headers = config.headers || {};
      headers['Authorization'] = 'Bxxx';
      config.headers = headers;
      return config;
   },
   (error: AxiosError) => {
      // 处理请求错误
      return Promise.reject(error);
   }
);

// 响应拦截器
instance.interceptors.response.use(
   (response: AxiosResponse) => {
      // 对响应数据进行处理
      return response;
   },
   (error: AxiosError) => {
      // 处理响应错误
      return Promise.reject(error);
   }
);


export default instance

methods.ts文件内容:

javascript 复制代码
import instance from './http'

// 封装GET请求
export function get<T>(url: string, params?: any): Promise<T> {
   return instance.get<T>(url, { params })
      .then(response => response.data)
      .catch(error => {
         throw error;
      });
}

// 封装POST请求
export function post<T>(url: string, data?: any): Promise<T> {
   return instance.post<T>(url, data)
      .then(response => response.data)
      .catch(error => {
         throw error;
      });
}

// put
export function put<T>(url: string, data?: any): Promise<T> {
   return instance.put<T>(url, data)
      .then(response => response.data)
      .catch(error => {
         throw error;
      });
}
//delete
export function del<T>(url: string): Promise<T> {
   return instance.delete<T>(url)
      .then(response => response.data)
      .catch(error => {
         throw error;
      });
}

四、新建api文件夹,用于存放接口 结构如下

api/user.ts 用户相关接口

javascript 复制代码
import { get } from '@/utils/methods'
import type { UserRequest } from '../types/user.d'

export  function userRequest(params: UserRequest) {
   return get('/users', { params }); //测试接口
}

types/user.d.ts定义接口ts类型

javascript 复制代码
export interface UserRequest{
   pageNum?:number,
   pageSize?:number,
}

五、在vue文件中使用

javascript 复制代码
<script setup lang="ts">
// 导出指定模块
import useStore from '@/store'
import { onMounted } from 'vue'
import { userRequest } from '@/apis/api/user'
const { user } = useStore()
// 获取
user.getUserList()

onMounted(() => {
  userRequest({}).then((res: any) => {
    console.log('res: ', res)
  })
})
</script>

请求成功测试

相关推荐
Lee川5 小时前
Milvus 实战:当 RAG 遇上向量数据库,从"玩具 Demo"到"生产可用的"那一步
前端·数据库·人工智能
anOnion5 小时前
构建无障碍组件之Toolbar Pattern
前端·html·交互设计
惊鸿一博6 小时前
图标加载方式_zeroIcon_是否加前缀mdi
开发语言·前端·javascript
森G6 小时前
TypeScript 基础类型
开发语言·typescript
2501_940041746 小时前
前端工程化进阶:5个高交互与可视化项目提示词
前端
你很易烊千玺6 小时前
JS 异步 从零讲(大白话 + 真实场景 + 可运行案例)
前端·javascript·vue.js
华洛7 小时前
讲讲如何在传统产品中挖掘AI需求
javascript·产品经理·产品
why技术8 小时前
AI Coding开始进入第四个时代,我还没上车呢!
前端·人工智能·后端
大家的林语冰9 小时前
CSS 已死?DOM 性能黑洞!Pretext 排版革命让你在文本间跳舞,没有 DOM 也能纵享丝滑~
前端·javascript·css
vipbic9 小时前
我也该升级了,陪伴了我7年的博客
前端