@gdin/request v1.1.1
title: 网络请求库
@gdin/request 网络请求库
基于axios的网络请求库,返回格式默认是{code, data, msg}
常用方法有:get post put delete 等等,并添加了 form update download 三个方法
安装
yarn add @gdin/request使用
用法同axios,只是对post put patch 有所修改
import request from '@gdin/request';
# 默认
request.defaults.timeout = 12000;
request.defaults.withCredentials = true;
# 业务方设置全局配置
request.defaults.baseURL = '/api';
request.defaults.dataMode = 'simple';
request.defaults.headers.common.Authorization = 'Basic c3RhcnRlcjpzdGFydGVyLXNlY3JldA==';
#......对axios的defaults以及config扩展了一个属性dataMode,用来设置返回值格式:
| 值 | 说明 |
|---|---|
| default | 默认,会把数据封装成 { code: number, data: Data, msg: string } 格式 |
| simple | 只返回 data 数据 |
| all | 后端接口返回什么就是什么 |
其他配置项请前往 [ Axios Config ] 查看
覆盖修改
针对 post put patch 这三个方法的参数,做了些微调整,例如:
原 post 方法是:axios.post(url[, data[, config]]),请求体参数data是作为第二个参数放置的, 现将data合并进config里面,改为两个参数即可。
即:axios.post(url[, data[, config]]) => request.post(url[, config])
- 例子:
request.post('/user/save', {
data: {
username: 'test',
name: '测试'
}
})扩展方法
request.form(url[, config])request.upload(url[, config])request.download(url[, config])
form 表单提交
是 POST 请求,并自动将请求头的中 content-type 改为application/x-www-form-urlencoded
upload 上传
是POST请求,默认不设置请求超时时间,即timeout = 0,可配置onUploadProgress监听上传进度
download 下载
默认是GET请求,可在config中添加method指定其他请求类型,默认不设置请求超时时间,即timeout = 0,可配置onDownloadProgress监听下载进度
sse 流式请求
EventSource 流式请求,用于获取 AI 流式数据
request.sse(url: string, config: SSERequestConfig);SSERequestConfig
| 属性 | 说明 | 类型 | 备注 |
|---|---|---|---|
baseURL | 接口前缀 | string | 默认使用全局的 request 配置 |
params | url 的参数 | object | |
data | 请求体 body 数据 | any | |
dataToFormData | 是否将 data 转成 FormData | boolean | |
cachePrefixKey | 缓存 key 的前缀 | string | 默认使用全局的 request 配置 |
authorization | token 鉴权 | string | 默认使用全局的 request 配置 |
json | 是否将 message 的 data 数据转成 json 格式 | boolean | |
getCtrl | 获取控制器(用于取消请求) | (ctrl: AbortController) => void | |
onopen | 连接已打开 | (response: Response) => Promise<void> | |
onmessage | 接收流式数据 | (message: EventSourceMessage) => void | |
onclose | 连接已关闭 | () => void | |
onerror | 连接异常 | (err: any) => any |
其他配置项请参考:@microsoft/fetch-event-source
本地开发代理阶段,可在proxy配置onProxyRes,可以兼容接收 sse 流式数据:
const proxy = {
'/api': {
target: 'https://www.test.com',
changeOrigin: true,
pathRewrite: { '^/api': '' },
// 添加下面这段代码
onProxyRes: (_: any, req: any, res: any) => {
if (req.headers.accept === 'text/event-stream') {
res.writeHead(res.statusCode, {
Connection: 'keep-alive',
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-transform',
'X-Accel-Buffering': 'no',
'Access-Control-Allow-Origin': '*',
});
}
},
},
};其他说明
关于在请求头设置或者更新登录凭证Authorization的值,可在登录成功后将数据存储到localStorage,存储的key要求是:
SYSTEM_TOKEN: Authorization 的值SYSTEM_TOKEN_EXPIRE: 过期时间(毫秒)
每个请求再发起时都会在拦截器 axios.interceptors.request 里从localStorage提取数据设置Authorization的值。
例子:
request.form('/login', { data }).then((res) => {
const { access_token, token_type, expires_in } = res;
// 保存token值
window.localStorage.setItem('SYSTEM_TOKEN', `${token_type} ${access_token}`);
// 保存token过期时间
window.localStorage.setItem(
'SYSTEM_TOKEN_EXPIRE',
`${Date.now() + expires_in * 1000}`,
);
});