@yzfe/request
TypeScript icon, indicating that this package has built-in type declarations

2.0.0-alpha.2 • Public • Published

伊智通用请求模块

一般是用来配合 @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
        }
    }
)

Readme

Keywords

none

Package Sidebar

Install

npm i @yzfe/request

Weekly Downloads

3

Version

2.0.0-alpha.2

License

MIT

Unpacked Size

20.9 kB

Total Files

5

Last publish

Collaborators

  • allenice
  • allenmo
  • vfasky