§ 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) |
备注:
- id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
- name 服务名,格式package/namespace/name
- path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
- url 完整服务URL url>path>name
- data 请求数据,格式为json对象
- callback 回调函数,参数说明: --- id 0为正常,1为取消,2为错误,3为进程,4为超时,其它错误 --- message 错误消息 --- data 响应数据
- async 为true默认是异步
- contentType 内容类型,常用类型application/json,text/plain
- dataType 返回数据类型 默认json
- time 请求超时设置,单位为毫秒,默认60000毫秒
- cover 是否打开loading界面,默认true
- headers json对象,内容是http扩展头
- 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);
}
}
});
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) |
备注:
- id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
- name 服务名,格式package/namespace/name
- path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
- url 完整服务URL url>path>name
- data 请求数据,格式为json对象
- async 为true默认是异步
- ontentType 内容类型,常用类型application/json,text/plain
- dataType 返回数据类型 默认json
- time 请求超时设置,单位为毫秒,默认60000毫秒
- cover 是否打开loading界面,默认true
- headers json对象,内容是http扩展头
- 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}`);
}
})
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 |
备注:
- id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
- name 服务名,格式package/namespace/name
- path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
- url 完整服务URL url>path>name
- data 请求数据,格式为json对象
- async 为true默认是异步
- ontentType 内容类型,常用类型application/json,text/plain
- dataType 返回数据类型 默认json
- time 请求超时设置,单位为毫秒,默认60000毫秒
- cover 是否打开loading界面,默认false
- headers json对象,内容是http扩展头
- 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}`);
}
}
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) |
备注:
- id 用于防止重复提交,也就是在如果两个服务的ID一致,那么在有一个服务未返回,那么另一个服务的提交是无效的。
- name 服务名,格式package/namespace/name
- path 服务路径,格式“/路径”或者“路径”,当路径前面没有/,那么框架回自动给路径加入应用名,如“路径”->"/appName/路径",name和path的关系,是path会覆盖name,也就是path>name
- url 完整服务URL url>path>name
- data 请求数据,格式为json对象
- async 为true默认是异步
- ontentType 内容类型,常用类型application/json,text/plain
- dataType 返回数据类型 默认json
- time 请求超时设置,单位为毫秒,默认60000毫秒
- cover 是否打开loading界面,默认false
- headers json对象,内容是http扩展头
- 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}`);
}
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);
}
});
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");
§ 5.3获取消息服务ID
可通过服务名获取服务对应的唯一ID 例子
this.getMessageServiceId("demo");
§ 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;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23