feat(init): 支持beforeSend,开发者可在请求发送前通过hook处理数据

This commit is contained in:
ivinwu
2021-06-15 15:40:24 +08:00
parent 782b9d7900
commit b0e48a8fe4
8 changed files with 56 additions and 16 deletions

View File

@@ -1,5 +1,5 @@
<p align="center"><img src="./image/logo.png" alt="weRequest" height="160"/></p>
<h2 align="center">v1.4.1</h2>
<h2 align="center">v1.5.0</h2>
<p align="center"><b>解决繁琐的小程序会话管理,一款自带登录态管理的网络请求组件。</b></p>
@@ -156,7 +156,7 @@ weRequest.request({
|参数名|类型|必填|默认值|说明|
| :-------- | :-------| :------ | :------ |:------ |
|sessionName|String|否|session|储存在localStorage的session名称且CGI请求的data中会自动带上以此为名称的session值可不配置默认为session|
|urlPerfix|String or Function|否||请求URL的固定前缀如果配置了后续请求的URL都会自动加上这个前缀如果是函数则为函数的返回值|
|urlPerfix|String/Function|否||请求URL的固定前缀如果配置了后续请求的URL都会自动加上这个前缀如果是函数则为函数的返回值|
|loginTrigger|Function|是||触发重新登录的条件参数为CGI返回的数据返回需要重新登录的条件|
|codeToSession|Object|是||用code换取session的CGI配置|
|reLoginLimit|Int|否|3|登录重试次数,当连续请求登录接口返回失败次数超过这个次数,将不再重试登录|
@@ -175,8 +175,9 @@ weRequest.request({
|sessionExpireKey|String|否|sessionExpireKey|如果为用户登陆态设置了本地缓存时间则过期时间将以此值为key存储在Storage中|
|doNotUseQueryString|Boolean|否|false|默认情况下POST请求登陆态除了带在请求body中也会带在queryString上如果配置了这个为true则登陆态不带在queryString中|
|setHeader|Object/Function|否||所有请求的header都会带上此对象中的字段|
|beforeSend|Function|否||请求发送前的hook开发者可在发送前自行处理数据|
##### codeToSession参数说明
##### codeToSession对象参数说明
|参数名|类型|必填|默认值|说明|
| :-------- | :-------| :------ | :------ |:------ |
@@ -186,7 +187,7 @@ weRequest.request({
|data|Object|否||登录接口需要的其他参数|
|success|Function|是||接口返回成功的函数需要返回session的值|
##### reportCGI返回参数说明
##### reportCGI函数参数说明
|参数名|类型|说明|
| :-------- | :-------| :------ |
|name|String|调用的接口名字可在request接口的report字段配置|
@@ -194,6 +195,12 @@ weRequest.request({
|endTime|Int|请求返回时的时间戳|
|request|Function|请求方法,可用于上报|
##### beforeSend函数参数说明
|参数名|类型|说明|
| :-------- | :-------| :------ |
|obj|Object|请求对象包含url,data,header开发者可自行修改并最后将obj对象返回|
|session|String|登录态票据开发者可按需将票据放入obj中|
#### 示例代码
```javascript
@@ -455,4 +462,19 @@ weRequest.request({
console.log(e.message); // 错误信息,已通过 `errorContent` 处理
console.log(e.data); // 错误请求返回包体
})
```
### 业务登录态票据希望放在header里需要怎么办
可在调用`init`方法时,在钩子`beforeSend`中实现,举例如下:
```javascript
weRequest.init({
// ...
beforeSend(obj, session) {
obj.header.session = session;
// 切记修改完后需要将obj返回
return obj;
},
// ...
})
```

View File

@@ -22,6 +22,7 @@ export interface IInitOption {
errorRetryBtn?: boolean;
doNotUseQueryString?: boolean;
errorHandler?: Function | null;
beforeSend?: Function | null;
}
export interface ICodeToSessionOptions {
url: string;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "we-request",
"version": "1.4.1",
"version": "1.5.0",
"description": "本工具通过拓展小程序的wx.request让开发者通过简单的配置实现自动管理登录态等功能",
"keywords": [
"登录态",

View File

@@ -52,6 +52,8 @@ export interface IInitOption {
doNotUseQueryString?: boolean;
/* 自定义错误处理函数 */
errorHandler?: Function | null;
/* 请求发送前提供hook给开发者自定义修改发送内容 */
beforeSend?: Function | null;
}
export interface ICodeToSessionOptions{

View File

@@ -142,6 +142,9 @@ function getGlobalData() {
function doRequest(obj: IRequestOption) {
obj = initializeRequestObj(obj);
if (typeof config.beforeSend === "function") {
obj = config.beforeSend(obj, status.session);
}
return new Promise((resolve, reject) => {
wx.request({
url: obj.url,
@@ -161,7 +164,7 @@ function doRequest(obj: IRequestOption) {
obj.complete();
}
if (obj.showLoading) {
loading.hide()
loading.hide();
}
}
})
@@ -170,6 +173,9 @@ function doRequest(obj: IRequestOption) {
function doUploadFile(obj: IUploadFileOption) {
obj = initializeUploadFileObj(obj);
if (typeof config.beforeSend === "function") {
obj = config.beforeSend(obj, status.session);
}
return new Promise((resolve, reject) => {
wx.uploadFile({
url: obj.url,
@@ -188,7 +194,7 @@ function doUploadFile(obj: IUploadFileOption) {
obj.complete();
}
if (obj.showLoading) {
loading.hide()
loading.hide();
}
}
})

View File

@@ -28,7 +28,9 @@ const defaultConfig: IInitOption = {
// session在本地缓存的key
sessionExpireKey: "sessionExpireKey",
// 自定义错误处理函数
errorHandler: null
errorHandler: null,
// 请求发送前提供hook给开发者自定义修改发送内容
beforeSend: null
};
export default defaultConfig;