§ Fox3.0前端框架-服务请求

§ 1.异步请求(回调函数)

request

§ 参数

JSON对象 属性说明:

参数 类型 required 说明
id String false 服务ID(防止重复提交)
name String true 服务名
path String true 服务路径
url String true 服务URL
data Json true 请求数据
callback Function true 请求回调函数
asyc Boolean false 是否异步,默认true
contentType String false 内容类型,默认application/json
dataType String false 返回数据类型 默认json
timeout Number false 超时(毫秒)
cover Boolean true 是否打开loading界面,默认true
headers Json false HTTP扩展头
type String POST 请求类型(POST,GET)

备注:

  1. id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
  2. name 服务名,格式package/namespace/name
  3. path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
  4. url 完整服务URL url>path>name
  5. data 请求数据,格式为json对象
  6. callback 回调函数,参数说明: --- id 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误 --- message 错误消息 --- data 响应数据
  7. async 为true默认是异步
  8. contentType 内容类型,常用类型application/json,text/plain
  9. dataType 返回数据类型 默认json
  10. time 请求超时设置,单位为毫秒,默认60000毫秒
  11. cover 是否打开loading界面,默认true
  12. headers json对象,内容是http扩展头
  13. type http请求方式,可选择 GET,POST

§ 返回值

void

§ 例子

/**
     * 异步请求
     *
     * @param json对象,参数如下:
     *   id: 请求的唯一ID,用于防止重复提交。如果两个请求的ID设置一致,
     *       那么这两个请求是不能同时提交的,其中一个回给服务端拒绝(resubmit)
     *   name: 服务请求路径
     *   data: 请求数据
     *   callback: 回调函数,回调函数参数说明:
     *   --- code 请求状态代码 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误
     *   --- message 错误消息
     *   --- data 响应数据
     *
     * @return Void
     */
     fox.service.request({
        id:"1",
        name:"demo/login/login",
        data:reqData,
        callback:function(code, message, data){
             if(code == 0){
                 if(fox.type(data)=="object"){
                    data=JSON.stringify(data);
                 }
                 //信息框
                 fox.layer.open("登录成功"+data);
              }else if(code == 1){
                 console.info("服务取消")
              }else if(code == 4){
                 console.info("服务超时")
              }else{
                  fox.layer.open("登录失败:"+message);
              }
         }
     });
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
31
32
33
34
35

§ 2 异步请求(Promise)

request

参数aync设置为true,并且不能设置callback函数

§ 参数

JSON对象 属性说明:

参数 类型 required 说明
id String false 服务ID(防止重复提交)
name String true 服务名
path String true 服务路径
url String true 服务URL
data Json true 请求数据
asyc Boolean false 是否异步,默认true
contentType String false 内容类型,默认application/json
dataType String false 返回数据类型 默认json
timeout Number false 超时(毫秒)
cover Boolean false 是否打开loading界面,默认true
headers Json false Http扩展头
type String POST 请求类型(POST,GET)

备注:

  1. id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
  2. name 服务名,格式package/namespace/name
  3. path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
  4. url 完整服务URL url>path>name
  5. data 请求数据,格式为json对象
  6. async 为true默认是异步
  7. ontentType 内容类型,常用类型application/json,text/plain
  8. dataType 返回数据类型 默认json
  9. time 请求超时设置,单位为毫秒,默认60000毫秒
  10. cover 是否打开loading界面,默认true
  11. headers json对象,内容是http扩展头
  12. type http请求方式,可选择 GET,POST

§ 返回值

Promise

then处理函数中的succes函数和error函数得参数都一个json对象,属性如下 --- code 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误 --- message 错误消息 --- data 响应数据

§ 例子

/**
     * 异步请求
     *
     * @param json对象,参数如下:
     *   id: 请求的唯一ID,用于防止重复提交。如果两个请求的ID设置一致,
     *       那么这两个请求是不能同时提交的,其中一个回给服务端拒绝(resubmit)
     *   name: 服务请求路径
     *   data: 请求数据
     *
     * @return Promise
     */
     this.request({
         id:"1",
         name:"demo/login/login",
         data:reqData
      }).then((response)=>{
           if(response.code == 0){
               let data;
               if(fox.type(response.data)=="object"){
                    data=JSON.stringify(response.data);
               }
               //信息框
               fox.layer.open(`登录成功:${data}`);
             }else{
               fox.layer.open(`登录失败:${response.message}`);
                    }
               },(error)=>{
                    if(error.code == 1){
                        console.info("服务取消")
                        //信息框
                        fox.layer.open(`服务取消`);
                    }else if(error.code == 4){
                        console.info("服务超时")
                        //信息框
                        fox.layer.open(`服务超时`);
                    }else{
                        fox.layer.open(`请求异常:${error.message}`);
                    }
               })
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
31
32
33
34
35
36
37
38
39

§ 3 sync/await请求

request

参数aync设置为true,并且不能设置callback函数,使用async函数函数 要求ES7语法支持

§ 参数

JSON对象 属性说明:

参数 类型 required 说明
id String false 服务ID(防止重复提交)
name String true 服务名
path String true 服务路径
url String true 服务URL
data Json true 请求数据
asyc Boolean false 是否异步,默认true
contentType String false 内容类型,默认application/json
dataType String false 返回数据类型 默认json
timeout Number false 超时(毫秒)
cover Boolean false 是否打开loading界面,默认true
headers Json false Http扩展头
type String POST 请求类型(POST,GET)s

备注:

  1. id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
  2. name 服务名,格式package/namespace/name
  3. path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
  4. url 完整服务URL url>path>name
  5. data 请求数据,格式为json对象
  6. async 为true默认是异步
  7. ontentType 内容类型,常用类型application/json,text/plain
  8. dataType 返回数据类型 默认json
  9. time 请求超时设置,单位为毫秒,默认60000毫秒
  10. cover 是否打开loading界面,默认false
  11. headers json对象,内容是http扩展头
  12. type http请求方式,可选择 GET,POST

###返回值 Json对象

Json对象,属性如下 --- code 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误 --- message 错误消息 --- data 响应数据

§ 例子

async loginByAsync_await(reqData) {
        /**
         * 请求
         *
         * @param json对象,参数如下:
         *   id: 请求的唯一ID,用于防止重复提交。如果两个请求的ID设置一致,
         *       那么这两个请求是不能同时提交的,其中一个回给服务端拒绝(resubmit)
         *   name: 服务请求路径
         *   data: 请求数据
         *
         * @return Promise
         */
         let res = await this.request({
              id:"1",
              name:"demo/login/login",
              data:reqData
          });
          if(res.code == 0){
              let data;
              if(fox.type(res.data)=="object"){
                  data=JSON.stringify(res.data);
              }
              fox.logger.info(`sync/await请求返回${data}`);
              //信息框
              fox.layer.open(`登录成功:${data}`);
          else if(res.code == 1){
              console.info("服务取消")
              //信息框
              fox.layer.open(`服务取消`);
          }else if(res.code == 4){
              console.info("服务超时")
              //信息框
              fox.layer.open(`服务超时`);
          }else{
              fox.layer.open(`登录失败:${res.message}`);
          }
    }
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
31
32
33
34
35
36
37

§ 4.同步通信(不推荐)

fox.service.request

必须设置async属性为false,Fox框架提供了同步请求服务的方法,该在PC上调试的时候由于受限浏览器,无法正常打开cover,但是在Fox外壳中运行时是有loading界面得。

§ 参数

JSON对象 属性说明:

参数 类型 required 说明
id String false 服务ID(防止重复提交)
name String true 服务名
path String true 服务路径
url String true 服务URL
data Json true 请求数据
asyc Boolean false 是否异步,默认true
contentType String false 内容类型,默认application/json
dataType String false 返回数据类型 默认json
timeout Number false 超时(毫秒)
cover Boolean false 是否打开loading界面,默认false
headers Json false Http扩展头
type String POST 请求类型(POST,GET)

备注:

  1. id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
  2. name 服务名,格式package/namespace/name
  3. path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
  4. url 完整服务URL url>path>name
  5. data 请求数据,格式为json对象
  6. async 为true默认是异步
  7. ontentType 内容类型,常用类型application/json,text/plain
  8. dataType 返回数据类型 默认json
  9. time 请求超时设置,单位为毫秒,默认60000毫秒
  10. cover 是否打开loading界面,默认false
  11. headers json对象,内容是http扩展头
  12. type http请求方式,可选择 GET,POST

§ 返回值

Json对象

json对象,属性如下 --- code 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误 --- message 错误消息 --- data 响应数据

§ 例子

/**
     * 异步请求
     *
     * @param json对象,参数如下:
     *   id: 请求的唯一ID,用于防止重复提交。如果两个请求的ID设置一致,
     *       那么这两个请求是不能同时提交的,其中一个回给服务端拒绝(resubmit)
     *   name: 服务请求路径
     *   async: 是否异步请求
     *   data: 请求数据
     *
     * @return Promise
     */
      let res = this.request({
          id:"1",
          name:"demo/login/login",
          data:reqData
       });
       if(res.code == 0){
           let data;
           if(fox.type(res.data)=="object"){
                data=JSON.stringify(res.data);
           }
           fox.logger.info(`同步请求返回${data}`);
           //信息框
           fox.layer.open(`登录成功:${data}`);
        }else if(res.code == 1){
            console.info("服务取消")
            //信息框
            fox.layer.open(`服务取消`);
        }else if(res.code == 4){
            console.info("服务超时")
            //信息框
            fox.layer.open(`服务超时`);
         }else{
            fox.layer.open(`登录失败:${res.message}`);
        }
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
31
32
33
34
35
36

§ 5.消息服务

消息服务用于监听服务端推送给客户端的消息

§ 5.1注册

提供注册服务接口,当服务注册成功后会回调函数,函数中有两个参数:name服务名,data是一个json对象,分别有属性msgType和content msgType:分别有#info和#notice,其中当消息类型为#info为第一连接成功后,其消息的content为服务端返回的唯一ID,后面服务端可以通过该ID发送消息到客户端对应的服务。 content:为消息的内容

例子

//注销
this.service.unRegisterMessageService("demo");
    //注册
    fox.service.registerMessageService("demo", function (name, data) {
    
//处理information消息
        if (data.msgType == "#info") {
            //记录地址
            var address = data.content;
            fox.logger.info("1.建立连接,返回标识地址:" + address);
            fox.service.request({
                name: "demo/demo/webSocket",
                data: {"address": address},
                callback: function (code, message, content) {
                    fox.logger.info("2.标识地址记录成功:" + JSON.stringify(content));
                }
            })
        }else {
            fox.layer.open("web socket通知:" + data.content);
        }
    });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

§ 5.2注销

提供了服务注销接口 例子

this.unRegisterMessageService("demo");
1

§ 5.3获取消息服务ID

可通过服务名获取服务对应的唯一ID 例子

this.getMessageServiceId("demo");
1

§ 6 全局过滤器

fox.service 提供了全局的过滤器,该过滤器有三个生命周期函数。

  • before 请求前触发
  • after 请求返回后触发
  • exception 异常发生后触发

§ 例子

//加入请求过滤器
this.addFilter({
      //过滤器名称
       name: "messageParser",
    
       //请求前触发
       before: function (event) {
            // 返回处理标志,true则继续处理,false则中断处理
            return true;
       },
    
       //请求返回后触发
       after: function (event) {
             //返回处理标志,true则继续处理,false则中断处理
             return true;
       },
    
       //异常发生后触发
       exception: function (event) {
            //返回处理标志,true则继续处理,false则中断处理
            return false;
       }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
最后更新于: 4/15/2022, 2:41:22 PM