kbfetch 1.0.8 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ kbfetch.post('https://api.example.com/data', { id: 1 }, { params: { qa: 1 } })
|
|
|
19
19
|
kbfetch.p('https://api.example.com/data', { params: { qa: 1 }, body: { id: 1 } })
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
path参数
|
|
22
|
+
path 参数
|
|
23
23
|
|
|
24
24
|
```js
|
|
25
25
|
kbfetch.get('https://baidu.com/:a/:b', { a: 1, b: 2 }).then(console.log)
|
|
@@ -27,7 +27,7 @@ kbfetch.post('https://baidu.com/:a/:b', { k: 2 }, { params: { a: 1, b: 2 } }).th
|
|
|
27
27
|
kbfetch.p('https://api.example.com/:a/:b', { params: { a: 1, b: 2 }, body: { id: 1 } })
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
发起 其他method 请求的示例:
|
|
30
|
+
发起 其他 method 请求的示例:
|
|
31
31
|
|
|
32
32
|
```js
|
|
33
33
|
// e.g. 1
|
|
@@ -45,12 +45,13 @@ ft.abort()
|
|
|
45
45
|
|
|
46
46
|
`or`
|
|
47
47
|
`timeout>=0`
|
|
48
|
+
|
|
48
49
|
```js
|
|
49
50
|
const ft = kbfetch.g('https://api.example.com/data', { params: { id: 1 }, timeout: 0 })
|
|
50
51
|
ft.abort()
|
|
51
52
|
```
|
|
52
53
|
|
|
53
|
-
设置公共参数比如token
|
|
54
|
+
设置公共参数比如 token
|
|
54
55
|
|
|
55
56
|
```js
|
|
56
57
|
kbfetch.baseHeaders = { token: 'XXX' }
|
|
@@ -80,14 +81,14 @@ uploadFile: (url: string, file: File, init?: KbFetchInit)
|
|
|
80
81
|
|
|
81
82
|
`KbFetchInit` 类型扩展了标准的 `RequestInit`,添加了一些可选的便捷属性:
|
|
82
83
|
|
|
83
|
-
-
|
|
84
|
-
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
84
|
+
- `baseUrl` - API 地址的公共前缀
|
|
85
|
+
- `baseHeaders` - 公共的 header,如 token
|
|
86
|
+
- `baseParams` - 公共的 params,如企业微信的 access_token,没有放在 header 里面,可以在这里设置
|
|
87
|
+
- `baseBody` - 公共 body
|
|
88
|
+
- `timeout` - 请求超时时间(毫秒)
|
|
89
|
+
- `before` - 修改/记录请求参数的回调函数
|
|
90
|
+
- `parser` - 在返回 resolve 前解析响应的回调函数
|
|
91
|
+
- `after` - 响应结果的回调函数
|
|
91
92
|
|
|
92
93
|
```typescript
|
|
93
94
|
import kbfetch, { createKbFetch, kbfc } from 'kbfetch'
|
|
@@ -124,11 +125,42 @@ const sse = (name: string, params: { ondata: (data: string) => any } & Record<st
|
|
|
124
125
|
// 开始读取流信息
|
|
125
126
|
return push()
|
|
126
127
|
},
|
|
127
|
-
after: v => v
|
|
128
|
+
after: v => v,
|
|
128
129
|
})
|
|
129
130
|
}
|
|
130
131
|
```
|
|
131
132
|
|
|
132
|
-
|
|
133
|
+
无感知 token 刷新 实现示例:
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
let refreshTokenPromise
|
|
137
|
+
export const kfc = createKbFetch({
|
|
138
|
+
baseUrl: 'https://xxx.xxx',
|
|
139
|
+
after(res, req) {
|
|
140
|
+
return res.then(async res => {
|
|
141
|
+
// 此处使用401状态码表示token过期
|
|
142
|
+
if (res.status !== 401) return res.data
|
|
143
|
+
// @ts-ignore __retry 表示是否已经重试,避免多次触发
|
|
144
|
+
if (userInfo.refreshToken && !req.init.__retry) {
|
|
145
|
+
// @ts-ignore
|
|
146
|
+
req.init.__retry = true
|
|
147
|
+
const { userId, refreshToken } = userInfo
|
|
148
|
+
await (refreshTokenPromise ||= kfc
|
|
149
|
+
.post('refreshUserToken', { user_id: userId, refresh_token: refreshToken })
|
|
150
|
+
.then(({ data }) => {
|
|
151
|
+
// 重新设置token
|
|
152
|
+
kfc.baseHeaders.token = data
|
|
153
|
+
})
|
|
154
|
+
.finally(() => (refreshTokenPromise = undefined)))
|
|
155
|
+
return kfc.do(req.url, req.init)
|
|
156
|
+
}
|
|
157
|
+
// 此处可以,清除用户信息跳转登录页
|
|
158
|
+
console.warn('登录信息已过期,请重新登录')
|
|
159
|
+
return Promise.reject('token错误')
|
|
160
|
+
})
|
|
161
|
+
},
|
|
162
|
+
})
|
|
163
|
+
kfc.baseHeaders = { userId: 'xxx', token: 'xxx' }
|
|
164
|
+
```
|
|
133
165
|
|
|
134
166
|
更多关于 `kbfetchInit` 对象的详细信息,请参考原始的 TypeScript 定义文件。
|