使用 Vue 3、TypeScript 和 Axios 封装请求

www.jswusn.com Other 2025-04-07 09:24:42 6次浏览


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

// 创建 Axios 实例
const service: AxiosInstance = axios.create({ 
  baseURL: '/api', // 可根据实际情况修改   
  timeout: 5000 // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(  
    (config: AxiosRequestConfig) => {     
      // 在发送请求之前做些什么,例如添加 token        
      // const token = localStorage.getItem('token');        
      // if (token) {        
      //     config.headers.Authorization = `Bearer ${token}`;        
      // }       
      return config;  
      },  
    (error: any) => {   
      // 处理请求错误     
      console.log(error);  
      return Promise.reject(error);  
    }
);
// 响应拦截器
service.interceptors.response.use(   
    (response: AxiosResponse) => {    
      // 对响应数据做点什么      
      const res = response.data;   
      return res; 
    },    
    (error: any) => {  
      // 处理响应错误    
      console.log('err' + error);  
      return Promise.reject(error); 
    }
);
// 封装请求方法
const request = {  
  get<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> { 
    return service.get(url, config); 
  },   
  post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {  
    return service.post(url, data, config);  
  },   
  put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {  
    return service.put(url, data, config);  
  },  
  delete<T = any>(url: string, config?: AxiosRequestConfig): Promise<T> { 
    return service.delete(url, config); 
  }
};

export default request;


使用示例

<template>  
  <div>   
    <button @click="fetchData">获取数据</button>       
    <div v-if="data">{{ data }}</div>
  </div>
</template>


<script lang="ts" setup>
import { ref } from 'vue';
import request from './request';

const data = ref<any | null>(null);
const fetchData = async () => {   
  try {     
    const result = await request.get('/test'); 
    data.value = result;  
  } 
  catch (error) {  
    console.error('请求出错:', error);  
  }
};
</script>


技术分享

苏南名片

  • 联系人:吴经理
  • 电话:152-1887-1916
  • 邮箱:message@jswusn.com
  • 地址:江苏省苏州市相城区

热门文章

Copyright © 2018-2025 jswusn.com 版权所有

技术支持:苏州网站建设  苏ICP备18036849号