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

Requester-初始化

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

requestOption-配置参数

参数名 作用 类型 默认值 备注
statusDict 自定义statusMessage Object    
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

BUZ-Requester请求管理相关推荐

  1. Android Okhttp3 (二) 二次封装请求管理类

    okHttp介绍 通过上面的对比说明,让你不得不做出明智的选择,OkHttp是一个相对成 官网地址:http://square.github.io/okhttp/ 官方API地址:http://m.b ...

  2. etcd v2文档(2) -- 客户端http请求管理集群成员api

    为什么80%的码农都做不了架构师?>>>    列出成员 返回一个HTTP 200 OK响应代码和所有成员在etcd集群中的表示. Request GET /v2/members H ...

  3. Ajax通讯异常12002,前端MVC框架[02] 发送AJAX请求及建立连接池

    前端MVC框架[02] 发送AJAX请求及建立连接池 默认分类 2012-10-11 07:51:28 < ol start='100' class='dp-xml'> / 异步请求管理器 ...

  4. BUZ前端框架-介绍

    介绍 BUZ是什么? BUZ是一套整体前端实施框架,它包含了页面生命管理.模板引擎.表单控件.请求管理等. 我们建议使用此框架来搭建整体前端框架,当然我们也支持自底向上逐层应用. BUZ的核心是mar ...

  5. OkHttp简化请求封装思路

    对于OKHttp的封装,现在已经有很多方法,甚至Retrofit也是基于OkHttp封装而来.本文的封装方式不一定是最好的,但相信在某一种场景下肯定能帮助你大大简化代码. 一个普通的请求如下,采用了链 ...

  6. IT 部门事件管理模式建立分析

    1.研究背景和意义 IT 服务的最佳理论实践是 ITIL,ITIL 已经成为了解 IT 服务最简单直接的一套方法论.IT 服务管理简称为:ITSM.ITIL 为 ITSM 提供了专业术语和流程指导,告 ...

  7. android 拦截webview资源请求,Android Webview拦截ajax请求

    Androi基接我果控近础收们,制近础收们,制近础收d Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉java ...

  8. uniapp 封装网络请求

    文章目录 一.前端 1. 封装网络请求 2. 封装模块请求方法 二.后端 2.1. 返回对象 2.2. 热搜接口 三.微信模拟请求 3.1. Network 3.2. Console 一.前端 1. ...

  9. 【软件质量】变更管理与可追踪性

    变更无处不在,其含义有业务维度和系统维度的阐述. 变更管理的业务方面更强调与新信息系统相关的变更行为和组织影响. 变更管理是管理软件产品和过程以及管理软件系统演化过程中的团队活动的过程,以系统合理性为 ...

最新文章

  1. sqlserver2000发布订阅
  2. Direct Byte Buffer的操作
  3. .NET Core 在程序集中集成Razor视图
  4. [Java基础]模块化概述
  5. 剑指offer-从尾到头打印链表
  6. python绘制如下图形、小三角形边长20_OpenGL学习脚印_ 绘制移动三角形 - 王定桥的专栏.pdf...
  7. java网页统计访客量_Java中的访客设计模式
  8. mysql为什么尽量少星号,mysql – select中是否存在星号排除其他列?
  9. Social Media附加价值开发的四大模式
  10. 如何使用SPSS进行相关性分析
  11. git常用使用命令个人总结
  12. Snaker-flow介绍
  13. 电商平台商品订单拆分模式分析
  14. 计算机的操作系统的功能有哪些,操作系统的主要功能是主要有哪些类型
  15. JS获取本机IP的工具类
  16. python 玩玩乐 - moviepy 剪辑视频变成 gif 图
  17. Mysql翻页查询数据重复怎么办?
  18. 程序员职场规划:你的命运不是一头骡子
  19. win10任务栏卡死
  20. 【泛函分析MOOC笔记】(一)拓扑和拓扑空间

热门文章

  1. 5000字英文计算机相关,自我介绍模拟器游戏
  2. 月入5万,计算机专业提升就靠它了
  3. 关于LoadRunner中pacing值的设置的意义
  4. NewStart,振奋起来吧,,少年
  5. DPDK技术介绍(一)
  6. Media-媒介(媒体、介质)【译】
  7. C语言之共享内存之shmget进程间通信(二十三)
  8. 使用nni对ResNet进行模型剪枝
  9. php的数组排列函数,常用PHP数组排序函数归纳
  10. 个体工商户需要交纳哪些税种?