vue3+ts+axios 二次封装

文章展示了如何在项目中安装和配置axios库,包括设置基础URL、超时时间和请求头。特别地,它强调了请求和响应拦截器的使用,用于处理token管理和错误处理。此外,还定义了get和post请求的辅助函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、依赖安装:

npm i axios qs @types/qs

二、axois/index.ts

import axios from 'axios'
import qs from 'qs'
const baseUr = 'http://backend-api-01.newbee.lid/api/v1/user/register'

let path = "http://backend-api-01.newbee.lid/api/v1/"             //请求根地址
// let path = "http://localhost:3060/"             //请求根地址

// 全局默认配置
axios.defaults.baseURL = path
axios.defaults.timeout = 10000
axios.defaults.headers.common['Authorization'] = localStorage.getItem('token') + ''

//请求拦截
axios.interceptors.request.use( 
  async config => {
    // 每次发送请求之前判断vuex中是否存在token        
    // 如果存在,则统一在http请求的header都加上token,这样后台根据token判断你的登录情况
    // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断 
    config.headers.token = sessionStorage.getItem('token')
    return config;
  },
  error => {
    return Promise.reject(error);
  })

// 添加响应拦截器
axios.interceptors.response.use(function (response) {
  let { data } = response
  if (data.token) {
    localStorage.setItem('kuaishi', data.token)
    axios.defaults.headers.common['Authorization'] = data.token;
  }
  return response;
}, function (error) {
  // if (error.response.status) {
  //   switch (error.response.status) {
  //     // 401: 未登录                
  //     // 未登录则跳转登录页面,并携带当前页面的路径                
  //     // 在登录成功后返回当前页面,这一步需要在登录页操作。                
  //     case 401:
  //       break
  //     // 403 token过期                
  //     // 登录过期对用户进行提示                
  //     // 清除本地token和清空vuex中token对象                
  //     // 跳转登录页面                
  //     default:
  //   }
  //   return Promise.reject(error.response);
  // }
  return Promise.reject(error);
});

 

const get = (url: string, params: object) => {
  return new Promise((resolve, reject) => {
    axios.get(url, { params }).then(res => {
      resolve(res.data)
    }).catch(err => {
      alert('服务出错')
    })
  })
}

const post = (url: string, data: object) => {
  return new Promise((resolve, reject) => {
    axios.post(url, qs.stringify(data)).then(res => {
      resolve(res.data)
    }).catch(err => {
      alert('服务出错')
    })
  })
}


export {
  get, post
}

三、axios/api.ts

import {
  get, post
} from './index'

export default {
  // Login: (data: object) => post('/api/users/Login', data), // 登录
}

只要在使用的文件里面引入 axios/api.ts 就行

Vue 3TypeScriptAxios二次封装可以提供更好的代码可维护性和可扩展性。下面是一个示例: 首先,你需要安装axios和@types/axios(用于TypeScript类型定义): ``` npm install axios npm install @types/axios ``` 然后,在你的项目中创建一个`api`文件夹,并在其中创建一个`http.ts`文件,用于封装Axios。 ```typescript import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'; // 创建一个Axios实例 const instance: AxiosInstance = axios.create({ baseURL: 'http://your-api-base-url.com', // 替换为你的API基础URL timeout: 5000, // 设置请求超时时间 }); // 请求拦截器 instance.interceptors.request.use( (config: AxiosRequestConfig) => { // 在发送请求之前做一些处理,例如添加请求头等 // config.headers['Authorization'] = 'Bearer ' + token; return config; }, (error) => { // 处理请求错误 return Promise.reject(error); } ); // 响应拦截器 instance.interceptors.response.use( (response: AxiosResponse) => { // 对响应数据进行处理 // 可以根据实际情况进行全局错误处理、数据转换等 return response.data; }, (error) => { // 处理响应错误 return Promise.reject(error); } ); export default instance; ``` 接下来,在需要使用Axios的地方导入`http.ts`文件,并使用封装好的Axios实例进行网络请求。 ```typescript import http from '@/api/http'; // 示例API请求方法 export const getUser = () => { return http.get('/user'); }; export const createUser = (data: any) => { return http.post('/user', data); }; // 其他API请求方法... ``` 这样,你就可以在Vue组件或其他地方使用这些封装好的API请求方法了。 ```typescript import { getUser } from '@/api/user'; export default { created() { this.fetchUser(); }, methods: { async fetchUser() { try { const user = await getUser(); // 处理返回的用户数据 } catch (error) { // 处理请求错误 } }, }, }; ``` 这就是Vue 3TypeScriptAxios二次封装的基本示例。你可以根据你的项目需求进一步扩展和优化这个封装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值