BUZ-Requester请求管理

Requester -- 请求管理

请求管理,为项目提供接口访问,默认提供一个ajax请求器,采用axios进行封装,框架提供更改请求器,并可以根据不同请求参数使用 不同的请求触发器进行触发。

使用方式

App.request

应用池在初始化时,会将request方法绑定到App中,作为使用入口。

1

2

3

4

App.request(url,{

    data:{},

    ...

},View);

View.request

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Buz.View({

    onShow:function(){

        this.request(url,{

            data:{},

            ...

        });

 

        //等同于

 

        App.request(url,{

            data:{},

            ...

        },this);

    }

});

Requester默认提供两种使用方式,两种区别在于是否有第三个参数:View(触发视图组件)。 方法返回Promise对象,可使用thencatchallrace方法进行相关操作。 不了解ES6的Promise同学建议先去了解下。

参数说明

第一个参数为URL-请求路径,第三个参数为当前视图组件,接下来我们详细介绍下第二个参数

参数名作用类型默认值备注
method请求类型Stringpost具体参考所依赖的底层请求触发器
data请求参数Object  
cache是否要记录缓存Booleanfalse若设置为记录缓存,在第一次请求成功后才会记录请求数据,并在 以后的请求中使用缓存作为值进行返回,不再访问服务器
cacheId缓存标识String 缓存记录标识=url+|+cacheId
cancelWhenRouting路由跳转时是否取消请求Booleantrue当路由发生改变时是否要清除当前未完成的请求,所设置为false,则永远不会被取消。

Requester-初始化

Requester在应用池初始化时进行挂载,并传入requestOption进行全局配置

requestOption-配置参数

参数名作用类型默认值备注
statusDict自定义statusMessageObject  
getHandler自定义获取请求触发器Function 第一个参数为当前传入配置参数,后面依次为当前注入的触发器。 高级用法,请详见扩展请求触发器
resultTrasnform自定义结果转换方法Function 用于全局转换服务器相应数据

resultTrasnform

对于成熟的项目而言,服务器相应数据通常分为响应报文头、响应报文数据,通过该方法可以 根据项目自身需要进行相应的逻辑判断,执行成功/失败。例如下面这个例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

new Buz.Application({

    requestOption:{

        resultTrasnform:function(response, resolve, reject){

            //response -- 服务器原始相应数据

            //resolve -- 成功执行逻辑

            //reject -- 错误执行逻辑

 

            if(response.rspHead.state === 'success'){

                resolve(response);

            }

            else{

                reject(response.rspHead.state,response.rspHead.message);

            }

        }

    },

    ...

}).start();

resolve成功逻辑执行方法,需要传入转换后的服务器数据;reject错误逻辑执行方法,需要传入错误状态和错误信息两个参数。

公开方法

由于Requester在应用池初始化时进行挂载,调用方法为:App.requester.方法名

方法名作用参数备注
addHandler添加请求触发器触发器参考:扩展请求触发器
request请求接口 请参考本文第一节内容
cancelRequests取消所有请求的回调函数forceCancelAll 是否全部取消若forceCancelAll=false则只取消cancelWhenRouting=true的请求, 若forceCancelAll=true,则取消所有未完成的请求。

Requester在初始化时,就已经对监听Routerbefore事件, 并在路由发生变化时,执行cancelRequests(false);不需要再进行相应的扩展。

事件

事件名称作用参数备注
before请求开始前触发当前请求配置信息 
after请求结束后当前请求配置信息 
error请求发生异常时触发{ code:错误码, settings:当前请求配置信息, message:错误信息 }除请求链接错误外,业务逻辑错误也会触发,具体参考resultTrasnform配置参数。 若事件返回false时,则终止触发Promise的reject,不会向外层使用者响应,一般 在错误时跳转登录等特殊需求下。

提示:可以通过监听before和after事件实现请求等待效果。

扩展请求触发器

请求管理默认提供一种基于axios的ajax请求触发器,基本满足常用的业务需求, 若项目有更复杂的要求,可根据需要自行扩展,接下来我们先了解下BaseRequester

BaseRequester - 请求触发器基类

请求接口类,用于规范底层处理类,所有触发器必须继承与BaseRequester类,并且必须实现send方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

*  作者:张传辉

*  功能名称:请求接口类,用于规范底层处理类

*  描述信息:所有方法必须进行实现

*      对外不输出Promise对象,统一由Requester统一创建并管理Promise

*/

class BaseRequester {

    /**

    * 参数转换方法

    * @param {Object} option 参数

    */

    transformData(url, option = {}) { return option; }

    /** 请求发起者 --必须重写

    *  @param {Object} config 配置参数-请参考当前项目请求器参数说明

    *  @param {Function} callBack 回调处理集

    *  @return {Function} Cancel取消处理

    */

    send(config, callBack) { }

}

 

export default BaseRequester;

基类提供两个扩展方法,其中send是发起请求的执行入口,必须实现,transformData 为参数转换方法,由于不同的底层实现参数规范可能不同,通过此方法可以实现对外参数一致性,对底层参数差异化。

扩展实践

接下来我们通过一个实践代码来了解下具体运行逻辑,业务要求:针对某些特定的url做差异化,这些特定url请求, 不请求服务器,而是请求虚拟报文(.js)

创建触发器

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

class RequestByMock extends BaseRequester {

    /** 请求发起者

     *  @param {Object} config 配置参数-请参考当前项目请求器参数说明

     *  @param {Function} callBack 回调处理集

     *  @return {Function} Cancel取消处理

     */

    send(config, callBack) {

 

        let canceled = false;

 

        import(`~/mock/${url}.js`)

            .then(function (response) {

                if (canceled) return;

 

                callBack('connect', response);

            })

            .catch(function (error) {

                if (canceled) return;

 

                callBack('error');

            });

 

 

        return function () {

            canceled = true;

        }

    }

}

 

export default RequestByMock;

在应用池初始化进行注入

1

2

3

4

5

6

import RequestByMock from './plugins/requster/RequestByMock';

new Buz.Application(...);

 

App.requester.addHander(RequestByMock);

 

App.start();

设置分支逻辑

1

2

3

4

5

6

7

8

9

10

11

12

13

App.new Buz.Application({

    requestOption:{

        getHandler:function(settings,requesterByAjax,requsterByMock){

            if(settings.url ==='xxxx'){

                return requsterByMock;

            }

            else{

                return requesterByAjax;

            }

        }

    },

    ...

}).start();

 

https://github.com/ZhangChuanHui/BUZ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值