rollup-plugin-replace-string
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

axios-ex

企业级项目axios集成方案

NPM version Codacy Badge build status Test coverage David deps Known Vulnerabilities npm download gzip License

Sonar

完整文档请查阅: API 完整文档

安装

axios-ex自带了最新版的 axios,可以不用安装axios

# 使用npm
$ npm install axios-ex --save

# 使用yarn
$ yarn add axios-ex

使用

常规用法

// {app_root}/src/plugins/axios.js
import { getCookie, setCookie } from 'js-cool'
import axiosExtend from 'axios-ex'

/**
 * 设置请求头
 *
 * @param {object} instance AxiosInstance
 */
function setHeaders(instance) {
	instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
}
/**
 * 请求拦截器
 *
 * @param {object} config AxiosRequestConfig
 * @param {object} options 请求参数AxiosExtendRequestOptions
 * @returns AxiosRequestConfig
 */
function onRequest(config, options = {}) {
	// some codes
	return config
}
/**
 * 请求错误时执行
 *
 * @param {object} err Error
 */
function onRequestError(err) {
	// handler request error
}
/**
 * 响应拦截器
 *
 * @param {object} res AxiosResponse<any>
 * @param {object} options 请求参数AxiosExtendRequestOptions
 * @returns Promise<unknown>
 */
function onResponse(res, options = {}) {
	if (res.data.success) return res.data
	return Promise.reject(res.data)
}
/**
 * 响应错误时执行
 *
 * @param {object} err Error
 */
function onResponseError(err) {
	// handler response error
}
/**
 * 请求错误或响应错误都执行
 *
 * @param {object} err Error
 */
function onError(err) {
	// handler request & response error
}
/**
 * 请求取消
 *
 * @param {object} err Error
 */
function onCancel(err) {
	console.error(err.message)
}

// 实例化
const axiosEx = new axiosExtend({
	maxConnections: 30, // 最大同时请求数,默认:0=不限制
	unique: true, // 是否取消前面的相似请求,默认:false
	retries: 0, // 重试次数,默认:0=不重试
	orderly: false, // 是否有序返回,默认:true
	setHeaders, // 设置请求头的方法
	onRequest, // 请求拦截器
	onRequestError, // 请求错误时执行
	onResponse, // 响应拦截器
	onResponseError, // 响应错误时执行
	onError, // 请求错误或响应错误都执行
	onCancel // 请求取消时的回调
})

export default options => {
	// 这里设置 unique 和 orderly 优先级高于实例化时候的配置
	options.unique = options.unique ?? false
	options.orderly = options.orderly ?? false
	// 这里的unique优先级更高
	return axiosEx.create(options)
}

定义失败重试的延时方法

  1. 自定义重试延迟的时长

    // 实例化的时候配置
    const axiosEx = new axiosExtend({
    	// ...
    	retryDelay: retryCount => {
    		return retryCount * 1000
    	}
    	// ...
    })
  2. 或者使用axios-ex内置的方法,exponentialDelay 随机递增 0%-50%

    import axiosExtend, { exponentialDelay } from 'axios-ex'
    // 实例化的时候配置
    const axiosEx = new axiosExtend({
    	// ...
    	retryDelay: exponentialDelay
    	// ...
    })

在 vue2.x 里面使用

有时候我们需要在onRequestonResponse里面使用this(vue 实例),可以这样写

import axiosExtend from 'axios-ex'

let axiosEx = null
// 请求拦截器
function onRequest(config, options = {}) {
	// this => vueInstance
	return config
}
// 响应拦截器
function onResponse(res, options = {}) {
	// 隐藏loading动画
	if (this instanceof Vue) {
		this.$loader.hide()
	}
	if (res.data.success) return res.data
	return Promise.reject(res.data)
}

export default options => {
	// 只需要初始化一次
	if (!axiosEx)
		axiosEx = new axiosExtend({
			onRequest: onRequest.bind(this),
			onResponse: onResponse.bind(this)
			//...
		})

	// 显示loading动画
	if (this instanceof Vue) {
		this.$loader.show()
	}
	return axiosEx.create(options)
}

问题和支持

Please open an issue here.

License

MIT

Package Sidebar

Install

npm i rollup-plugin-replace-string

Weekly Downloads

1

Version

1.0.0

License

MIT

Unpacked Size

12.9 kB

Total Files

8

Last publish

Collaborators

  • saqqdy