Uke Request
基于 fetch API 的进一步封装, 提供订阅发布与中间件机制。
Basic Usage
Support RESTFul
以下事例以 $R
指定 RequestClass
的实例
; const $R = ; // 可以为每一个请求对象设置配置$R; const getRes = await $R;const postRes = await $R;const putRes = await $R;const delRes = await $R;
Adavance Usage
把 params 转换成 query url
// get, 使用 params 自动转换成对应的 url// 最终请求: ${baseUrl}/item-list?id=123&other=123let res = await $R; // 统一的检查 res status 的状态,如果 return false,则触发 onErr$R { return true;}
事件订阅
$R 提供两种订阅事件 onRes
onErr
, 并且会响应每个请求都
// 每当有 res 的时候执行$R; // 每当发生错误时执行$R;
错误触发 & 错误处理
$R 将根据 checkStatus 返回值判断是否进入错误处理流程, 错误处理流程有两种方式
- 订阅
$R.on('onErr', function errHandle() {})
- 为每一个请求订阅的错误回调
$R.get({ url: '', onError: function errHandle() {} })
注意: 如果传入了 onError 回调,则不执行通过 $R.on('onErr') 订阅的回调
// override checkStatus$R.checkStatus =false // 如果传入了 onError 回调,则不执行通过 $R.on('onErr') 订阅的回调$R.get $R.on'onErr',
中间件 Middleware
中间件处理有两个触发时机, 一旦注册,则每次请求都会触发,并且原来用于提交的 data 将会被中间件返回的值替换。
- 请求前 before req
- 响应后 after res
const before = { return reqData;}const after = { return resData;}$R let postRes = await $R;
内置中间件
通讯加密
;; ; // 使用加密解密$R.use; // $R 会将 {ID: '321'} 以 '123' 为加密 key 进行 rc4 加密并发送到服务器// 收到响应后以同样方式解密,如果服务端返回的数据也时同样方式加密的话; // 使用内容压缩// dataWrapper、dataWrapperBeforeDecompress、dataWrapperAfterDecompress 均为格式调整回调, ;;; $R.use; // 如果消息体的长度大于 limitedLen,则会将消息进行 lzma 压缩
$R
API
// 底层 request API$R.requestparams: RequestParams // 设置 $R 配置$R.setConfigconfig: RequestConfig // 使用中间件$R.useoptions: MiddlewareOptions | Function // 同 $R.use([before])$R.useBeforeFunction | Function // 同 $R.use([null, after])$R.useAfterFunction | Function // url 包装$R.urlFilterpath: string, params?: ParamEntity // 上传$R.uploadpath: string, data: RequestInit
$R.request
为通用底层接口,其他的 $R.get
$R.post
$R.del
$R.put
$R.patch
均为该接口的上层应用封装。
// 其他方式, options 同 fetch API,sendData 如果是 js,将自动做 header 对应的转换let res = await $R;
url resolve
uke-request
提供,用于解析前端的 url
的 API
;
urlParamsToQuery
const urlParamsConfig = url: 'https://ss.com' params: id: '1' req: sessID: 123 username: 'alex' toBase64: false // 如果为 true,则将值进行 base64 转换 ; // 输出 'https://ss.com?id=1&req={sessID:123,username=alex}'
getUrlParams
// 若此时的 url 为 'https://ss.com?id=1&req={sessID:123,username=alex}'const res = ; // res = 1
resolveUrl
; // 输出 'https://a.com/path1/path2'