1.1.0 • Published 2 years ago

@sasaiweb/axios v1.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

Axios 封装

导语

普通的项目直接使用 Axios 已经是足够的,但是相对复杂的项目,尤其是使用不同的后端服务,axios需要针对于不同的服务做出不同的配置或者处理, 就需要创建多个axios,简单粗暴的同学会多复制一份axios.js,这样能处理问题,但是不符合编程思想,所以使用类语法进行封装,来创建多个实例,一套代码传入不同配置来应对不同的需求

TS版本1.0 (主要参考网上代码,以及代码解析)团队npm 发包版本

  • 可创建多个axios实例, 实现多个实例不同, 支持传入配置 axios 所有支持的配置,并支持手动传入自定义拦截器
  • 拦截器更加灵活,有全局、实例、接口三种拦截器。
  • 增加请求优化配置 可以移除请求
  • TS语法,代码更加规范化,减少运行错误发生

下载依赖

npm i @sasaiweb/axios

项目引入

import SasaiRequest from '@sasaiweb/axios'

实例化

new SasaiRequest({
  baseURL: '',
  timeout: 1000 * 60 * 5,
  interceptors: {
    // 请求拦截器
    requestInterceptors: (config) => {
      console.log('实例请求拦截器 :>> ')
      return config
    },
    // 响应拦截器
    responseInterceptors: (result) => {
      console.log('实例响应拦截器 :>> ',result)
      return result
    }
  }
})

npm.io

js文件完整代码
import SasaiRequest from '@sasaiweb/axios'

//实例化请求
const request = new SasaiRequest({
  baseURL: '',
  timeout: 1000 * 60 * 5,
  interceptors: {
    // 请求拦截器
    requestInterceptors: (config) => {
      console.log('实例请求拦截器 :>> ')
      return config
    },
    // 响应拦截器
    responseInterceptors: (result) => {
      console.log('实例响应拦截器 :>> ',result)
      return result
    }
  }
})

/**
 * @description: 请求
 * @param {baseRequestConfig} config 不管是GET还是POST请求都使用data
 * @returns {Promise}
 */
const baseRequest = (config) => {
  const { method = 'GET' } = config
  if (method === 'get' || method === 'GET') {
    config.params = config.data
  }
  return request.request(config)
}


// 取消请求
export const cancelRequest = (url) => {
  return request.cancelRequest(url)
}
// 取消全部请求
export const cancelAllRequest = () => {
  return request.cancelAllRequest()
}

export default baseRequest 

页面使用

import baseRequest  from '@/utils/request'

baseRequest ({
  url: '/tapd/bugs',
  method: 'post',
  data,
  interceptors: {
    requestInterceptors(res) {
      console.log('A接口当前接口请求拦截')
      return res
    },
    responseInterceptors(result) {
      console.log('A接口当前接口响应拦截', result)
      return result
    }
  }
})
Ts文件完整代码
import SasaiRequest from '@sasaiweb/axios'

import type { RequestConfig } from '@sasaiweb/axios'
interface baseRequestConfig<T> extends RequestConfig {
  data?: T
}
interface baseResponse<T> {
  statusCode: number
  desc: string
  result: T
}

const request = new SasaiRequest({
  baseURL: '',
  timeout: 1000 * 60 * 5,
  interceptors: {
    // 请求拦截器
    requestInterceptors: (config) => {
      console.log('实例请求拦截器 :>> ')
      return config
    },
    // 响应拦截器
    responseInterceptors: (result) => {
      console.log('实例响应拦截器 :>> ',result)
      return result
    }
  }
})

/**
 * @description: 函数的描述
 * @generic D 请求参数
 * @generic T 响应结构
 * @param {baseRequestConfig} config 不管是GET还是POST请求都使用data
 * @returns {Promise}
 */
const baseRequest = <D = any, T = any>(config: baseRequestConfig<D>) => {
  const { method = 'GET' } = config
  if (method === 'get' || method === 'GET') {
    config.params = config.data
  }
  return request.request<baseResponse<T>>(config)
}

// 取消请求
export const cancelRequest = (url: string | string[]) => {
  return request.cancelRequest(url)
}
// 取消全部请求
export const cancelAllRequest = () => {
  return request.cancelAllRequest()
}


export default baseRequest 

另外还有 JS版本1.0(分支名 javascript_version)可以简单学习使用

  • 可创建多个axios实例, 实现多个实例不同, 支持传入配置 baseURL默认接口地址, timeout超时时间
  • 增加请求优化配置 clear是否取消重复请求,同一时间内同个接口 如果在 pending 中则取消之前的请求
  • 抛出了 clearPending 方法 清空 pending 中的请求(在路由跳转时调用)优化请求带宽
1.1.0

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago