# @yzfe/request

> 伊智通用请求模块

Latest version **2.0.0-alpha.2** (published 2021-12-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install @yzfe/request
pnpm add @yzfe/request
yarn add @yzfe/request
bun add @yzfe/request
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: esm support; no vulnerabilities.

Warnings: low downloads; no types.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0-alpha.2 |
| Published | 2021-12-30 |
| First published | 2020-02-28 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 20.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Allenice |
| Maintainers | allenice, minfive, allenmo, alanhuang, vfasky, lauginwing, jiaxin, perlou, masonz |

## Links

- npm: https://www.npmjs.com/package/@yzfe/request
- npm.io page: https://npm.io/package/@yzfe/request

## Recent versions

- 2.0.0-alpha.2 (latest) — 2021-12-30
- 2.0.0-alpha.1 — 2021-06-29
- 2.0.0-alpha.0 — 2021-04-17
- 1.0.1 — 2020-09-08
- 1.0.0 — 2020-09-08
- 0.0.2 — 2020-03-04
- 0.0.1 — 2020-02-28

## README

# 伊智通用请求模块

一般是用来配合 @yzfe/openapi-generator 使用的

## 开发

```bash
yarn dev
yarn build
```

## 使用

```typescript
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 拦截器，配置请求

```typescript
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 拦截器，配置接口返回处理

```typescript
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
        }
    }
)
```

---
_Source: https://npm.io/package/@yzfe/request · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
