@yzfe/request
v2.0.0-alpha.2
Published
伊智通用请求模块
Downloads
4
Readme
伊智通用请求模块
一般是用来配合 @yzfe/openapi-generator 使用的
开发
yarn dev
yarn build
使用
import { request, setErrorHandler, createRequest, setNotification } from '@yzfe/request'
// get, post...
request.get('url', {params: 'get 参数', body: 'post 数据'}, {hideError: false, ...otherAxoisOptions})
// 使用新的 baseUrl 创建新的 request 对象
let newRequest = createRequst('newHost')
// 设置错误提示函数
setNotification((msg: string) => {
ElementUI.Notification.error(msg)
})
// 如果你需要自己处理错误逻辑,你可以设置新的错误处理函数
setErrorHandler((err: AxiosError) => {
// 错误逻辑
})
推荐拦截器(例子)
一般都需要设置以下两种拦截器,这些拦截器都是针对具体项目设置
request 拦截器,配置请求
import { request } from '@yzfe/request'
request.ax.interceptors.request.use(async options => {
// 设置 api base url
options.baseUrl = 'https://www.api.com/'
// 设置 auth 数据
let { token, zoneId, salonId } = await getHeaderData()
options.headers['token'] = `${token}`
options.headers['zoneId'] = `${zoneId}`
options.headers['salonId'] = `${salonId}`
return options
})
response 拦截器,配置接口返回处理
import { request } from '@yzfe/request'
let _isExpired = false
request.ax.interceptors.response.use(
res => {
let data = res.data
if (data) {
let code = data.code || 0
if (data instanceof Blob) {
return res
}
if (code === 200 || code === 204) {
return data
} else if (code === 403 || code === 401) {
// token 过期处理函数
expiredCallback()
throw new APIError('请登录', res)
} else {
let msg = '未知错误'
if (res.data && res.data.msg) {
msg = res.data.msg
}
throw new APIError(msg, res)
}
} else {
throw new HttpError('网络连接错误,请稍后再试', res)
}
},
(err: AxiosError) => {
if (err.response && err.response.status === 401) {
if (!_isExpired) {
_isExpired = true
notification('登录过期,请重新登录')
setTimeout(() => {
// 异常登录过期,登出后重新登录
expiredCallback()
_isExpired = false
}, 4000)
}
throw new axios.Cancel('登录过期,请重新登录')
} else {
throw err
}
}
)