Vue3框架搭建2:axios+typescript封装

avatar
作者
猴君
阅读量:7

仓库地址:https://github.com/buguniao5213/LuArch

1、安装axios

npm install axios 

2、创建文件

先创建一个文件夹:

├── src/ │   ├── api/         │   │   ├── index.ts/   #编写axios封装代码     │   │   └── example.ts/ #定义向后端服务器发送请求的模块` 
├── publix/ │   ├── json/         │   │   └── example.json/   #模拟get接口获取到的数据` 

3、导入申明

导入axios库和相关类型

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

4、基础url定义

这个后面放到vite的缓建变量配置中(.env)

const BASE_URL = '/' 

5、定义request类

要素如下:

export class Request {     private instance: AxiosInstance;     private baseConfig: AxiosRequestConfig = { baseURL: BASE_URL, timeout: 60000 };     public constructor() {         //...         }     public request() {         //...         }     public get() {         //...         }          //...     //... } 

a)、private instance:私有属性instance:Axios实例

b)、private baseConfig:基本配置,包括基础URL和超时时间

c)、public constructor:构造函数

创建Axios实例,合并基本配置和传入配置

设置请求拦截器:可以添加token等认证信息

设置响应拦截器:处理相应数据,根据状态码决定返回数据或报错误信息

d)、请求方法设置:

request:通用请求方法。

get:GET请求方法。

post: POST 请求方法

put: PUT 请求方法

delete: DELETE 请求方法

完整代码如下:

index.ts:

export class Request {     private instance: AxiosInstance;     private baseConfig: AxiosRequestConfig = { baseURL: BASE_URL, timeout: 60000 };      public constructor(config: AxiosRequestConfig) {         this.instance = axios.create(Object.assign(this.baseConfig, config));          this.instance.interceptors.request.use(             (config: any) => {                 // 配置处理逻辑                 // const token = 'tokentoken';                 return config;             },             (error: any) => {                 return Promise.reject(error);             }         )         this.instance.interceptors.response.use(             (res: any) => {                 if(res.data.code === 200) {                     return res.data.data;                 }else {                     // 错误code处理                     return "发生错误";                 }             },             (error: any) => {                 return Promise.reject(error);             }         )     }      public request<T = any>(config: AxiosRequestConfig): Promise<T> {         return this.instance.request(config);     }      public get<T = any>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {         return this.instance.get(url, {params, ...config});     }      public post<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {         return this.instance.post(url, data, config);     }      public put<T = any>(url: string, data?: any, config?: AxiosRequestConfig): Promise<T> {         return this.instance.put(url, data, config)     }      public delete<T = any>(url: string, params?: any, config?: AxiosRequestConfig): Promise<T> {         return this.instance.delete(url, {params, ...config});     }  } 

6、创建实例,并导出为Axios

export const Axios = new Request({     baseURL: BASE_URL, }); 

7、使用

a)、封装一个HTTP请求

example.ts:

import { Axios } from '@/api'  export function HTLLOWORD() {     return Axios.get<any>('/json/example.json') } 

example.json:

{        "code": 200,     "data": "hello word" } 

b)、调用

import { HTLLOWORD } from '@/api/example'  const getTest = () => {   HTLLOWORD().then(res => {     console.log(res)   }) }  getTest(); 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!