vue3 学习笔记04 -- axios的使用及封装

vue3 学习笔记04 – axios的使用及封装

  • 安装 Axios 和 TypeScript 类型定义
npm install axios
npm install -D @types/axios

创建一个 Axios 实例并封装成一个可复用的模块,这样可以在整个应用中轻松地进行 API 请求管理。

  • 在 src 目录下创建一个 services 文件夹,并在其中创建 api.ts 文件:
  // src/services/api.ts

import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';

// 创建一个 axios 实例
const api: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API,
  timeout: 30000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
    // 其他默认请求头可以在这里配置
  }
});

// 请求拦截器
api.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    // 在请求发送之前做些什么,例如加入 token 等操作
    return config;
  },
  (error) => {
    // 处理请求错误
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  (response: AxiosResponse) => {
    // 在响应数据返回之前做些什么,例如对响应数据进行处理
    return response.data;
  },
  (error) => {
    // 处理响应错误
    return Promise.reject(error);
  }
);

export default api;

  • 项目根目录新建.env.dev – 开发环境变量
NODE_ENV = 'development'
VITE_APP_BASE_API = '/api'
VITE_APP_TARGET_URL = "https://api.example.com"
  • 项目根目录新建.env.pro – 生产环境变量
NODE_ENV = 'production'
VITE_APP_BASE_API = '/api'
VITE_APP_TARGET_URL = "https://api.example.com"
  • vite.config.ts中配置proxy
export default defineConfig({
  plugins: [vue()],

  server:{
    host: '0.0.0.0', // 允许IP访问
    proxy: {
        [env.VITE_APP_BASE_API]: {
          changeOrigin: true,
          target: env.VITE_APP_TARGET_URL,
          secure: false,
          rewrite: (path) => path.replace(new RegExp(`^${env.VITE_APP_BASE_API}`), '')
        },
      }
  }
})
  • 使用axios封装

    • 在src/api文件下新建login/login.ts文件
          import api from '@/services/api';
          import { AxiosPromise } from "axios";
          import { LoginData, LoginResult } from "./types";
          export function login(data:LoginData):AxiosPromise<LoginResult> {
              return api({
                  url: '/mock/user/login',
                  method: 'post',
                  data
              })
          }
      
    • src/login/types.ts
          export interface LoginData {
              /**
              * 用户名
              */
              username: string;
              /**
              * 密码
              */
              password: string;
          }
          export interface userInfoVo {
              id: number
              name: string
              phone: number
          }
          /**
          * 登录响应
          */
          export interface LoginResult {
              /**
              * token
              */
              token?: string;
              /**
              * 过期时间(单位:毫秒)
              */
              expireAt?: number;
              /**
              * 刷新token
              */
              refreshToken?: string;
              /**
              * 用户信息
              */
              userInfo?: userInfoVo[];
          }
      
  • vue文件中使用

<template>
 form表单.....
<el-button class="login-button" type="primary" @click="handleLogin" :loading="loading"
        >登录</el-button
      >
</template> 
<script setup lang="ts">
import { login } from '@/api/login/login'
import { useRouter } from 'vue-router'
let loading = ref(false)
const router = useRouter()
const handleLogin = ()=>{
    let data = {
        username:'xxx',
        password:'xxx'
    }
    loading.value = true
    login(data).then((res)=>{
        loading.value = false
        // 一些存储token及其他信息的处理的处理
        ....要干的事
        router.push('/')
    })
}
</script>  
Vue3中,使用封装axios可以通过以下步骤来完成: 1. 首先,在项目的根目录下使用npm命令安装axiosvue-axios: ``` npm install --save axios vue-axios ``` 2. 在根目录上新建一个名为`api`的文件夹,并在其中创建`axios.js`和`httpHelper.js`文件。 3. 在`axios.js`文件中,引入axios并创建axios实例: ``` import axios from "axios"; const axiosInit = axios.create({ // 设置超时时间 timeout: 2000 }); export default axiosInit; ``` 4. 在`httpHelper.js`文件中,对axios实例进行进一步的封装和配置: ``` import axiosInit from "./axios"; // 请求拦截器 axiosInit.interceptors.request.use( (config) => { // 在发送请求之前可以在config中做一些处理,例如添加token等 return config; }, (error) => { // 对请求错误进行处理 return Promise.reject(error); } ); // 响应拦截器 axiosInit.interceptors.response.use( (response) => { // 对响应数据进行处理 return response; }, (error) => { // 对响应错误进行处理 return Promise.reject(error); } ); export default axiosInit; ``` 5. 在需要使用axios的地方,引入封装好的`httpHelper.js`文件,并使用axios发送请求: ``` import httpHelper from "@/api/httpHelper"; httpHelper.get("/api/users") .then((response) => { // 处理返回的数据 }) .catch((error) => { // 处理请求错误 }); ``` 这样,你就可以在Vue3中使用封装axios了。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【vue3】 axios封装使用(js/ts)](https://blog.csdn.net/zxsy19966/article/details/127686261)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [详解vueaxios使用封装](https://download.csdn.net/download/weixin_38714509/12945130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值