前端调用服务
在前端页面上可以根据请求的请求地址、请求方法、请求参数发送请求,从而获得请求返回的数据。系统提供四个组件:服务请求组件、网络请求组件、高级网络请求组件、API 请求组件,和一个 API 实现前端调用服务,说明见下表
组件或 API | 说明 |
---|---|
服务请求组件 | 添加服务模型后,会自动产生服务请求组件,支持设置参数、返回结果数据集。支持调用租户内其它应用的服务 |
网络请求组件 | 调用同域的请求,可用于调用自定义 controller 的服务 |
高级网络请求组件 | 调用跨域的请求 |
API 请求组件 | 封装 OpenAPI,用于调用第三方 OpenAPI 服务和其他租户对外暴露的服务 |
request() | 调用同域的请求 |
特别说明
- 不通过服务请求组件调用服务时,请注意请求路径是全小写的,可以打开 gen-java/controller 查看请求路径
- 通过 app.m 可以实现转调,即前端发送同域请求,后端实现跨域转发,参考《网关路由转发》
服务请求组件
系统为实现无代码开发和低代码开发,提供服务请求组件。服务请求组件自带请求地址,可进行参数设置,调用服务请求组件的发送服务请求操作或方法,获取请求返回数据。
例如:在服务中定义查询商品和查询商品2两个请求,如下图所示
在页面的服务组件面板中,产生两个服务请求组件:查询商品和查询商品2,如下图所示
组件属性
组件包括5个属性:服务、参数、参数自动编码、请求数据类型和返回数据类型。
- 服务
这个属性存储的是服务的请求地址,服务请求组件自带服务属性值,无需设置
- 参数设置
设置请求参数中需要调用方传入的参数,例如在请求中定义“商品名称”参数,如下图所示
在服务请求组件的参数设置中,会列出请求中定义的参数,如下图所示
也可以在调用点设置参数,如下图所示
- 参数自动编码
由于一些字符和中文需要编码后,才能发送,系统提供自动编码能力
- 请求数据类型
请求数据类型 Content-Type,在 Http 协议消息头中,使用 Content-Type 来表示请求中的数据类型信息。它用来告诉服务端如何处理请求的数据。
Content-Type | 说明 |
---|---|
application/json | JSON 是一种轻量级的数据格式,以“键-值”对的方式组织的数据。使用这个类型,需要参数本身就是 JSON 格式的数据,参数会被直接放到请求实体里,不进行任何处理,服务端会按 JSON 格式解析数据 |
application/x-www-form-urlencoded | Http 会将请求参数用 key1=val1&key2=val2 的方式进行组织,并放到请求实体里面,注意如果是中文或特殊字符如"/"、","、“:" 等会自动进行 URL 转码。不支持文件,一般用于表单提交 |
- 返回数据类型
返回数据类型 Data-Type,在 Http 协议消息头中,使用 Data-Type 来表示响应中的数据类型信息。它用来告诉客户端(一般是浏览器)如何解析响应的数据。
主要分为4种类型:json text xml html。返回 JSON 数据就设置为 json,返回普通数据就设置为 text。
组件操作和方法
组件提供一个操作:发送服务请求,用于发送请求以调用服务,如下图所示
组件提供一个方法:send,参数是请求参数,返回 promise,示例代码如下
onJsServiceBtnClick = async (event) => {
let productName = this.comp("pageData").getValue("productName");
let ret = await this.comp("serviceRequest1").send({
"productName": productName
})
console.log(ret);
}
返回结果输出如下图所示,其中 data 为返回的数据
组件的事件
组件提供4个事件,分别是请求前、请求成功、请求失败和响应进度消息。
- 在请求成功事件中,获得请求返回的数据
- 在请求失败事件中,返回异常数据,从中获取错误信息。使用操作时,写作 $event.data.message,使用代码时,写作 event.data.message
- 响应进度消息,配合响应流模式,参考《响应流模式(执行长时间任务)》
服务数据集
如果希望通过服务返回几条数据,可以设置请求返回为某个数据集的集合。数据集可以是动态数据集,也可以是静态数据集。请求返回的设置如下图所示
调用这个服务,从后端返回 List<数据集>,在前端接收到 JSON 数组。此时可以通过数据组件的 loadData 方法,将 JSON 数组中的内容,加载到数据组件中,规则是 JSON 中的 key 和数据组件中的列标识相同则写入数据。这是通过写代码实现的,系统提供了无代码的方式,服务请求组件添加结果数据集,设计界面如下图所示
调用服务后数据自动写入结果数据集,在页面中使用表格等组件展示结果数据集中的内容,如下图所示
结果数据集是支持分页的,它提供了刷新数据的方法,自动计算要获取的页数,并调用服务请求,获得该页数的相应数据。参考《调用服务返回分页数据》
调用租户内其他应用的服务
IDE 中的高级页面,提供引入租户内其他应用的服务,如下图所示
选择应用和其中的服务
引入后,使用方式同当前应用中的服务
网络请求组件
网络请求组件用于调用同域的请求。对于自定义 controller 的服务,可以使用网络请求组件调用
组件属性
组件包括7个属性:请求地址、动态请求地址、请求类型、请求头、发送数据、请求数据类型和返回数据类型。
- 请求地址、动态请求地址
请求 URL,支持表达式
- 请求类型
请求类型:GET、POST、PUT、DELETE
- 请求头、发送数据
JSON 格式,支持表达式
- 请求数据类型、返回数据类型
同服务请求组件
组件操作和方法
组件提供一个操作:发送请求,用于发送请求以调用服务,如下图所示
组件提供一个方法:send,参数是请求的所有参数,返回 promise,示例代码如下
onJsRequestBtnClick = async (event) => {
let productName = this.comp("pageData").getValue("productName");
let ret = await this.comp("request1").send({
url:"/main/fuwu/queryproduct2",
data:{
"productName": productName
},
header:{
"aaa":"aaa"
}
})
this.comp("retData").loadData(ret.data.data);
console.log(ret);
}
返回结果输出如下图所示,其中 data 为返回的数据
组件的事件
组件提供2个事件:请求成功和请求失败。在请求成功事件中,获取返回的数据,使用数据组件的 loadData 方法,可将返回的数据写入数据组件
高级网络请求组件
高级网络请求组件的属性、操作、方法、事件同网络请求组件一致,比网络请求组件多一个属性:转调跨域请求,这是该组件区别于网络请求组件的地方,该组件支持跨域访问
高级网络请求组件是市场组件,用时先从市场中添加,如下图所示
添加后,出现在组件面板-高级中,显示为“高级请求”,如下图所示
API 请求组件
参考《API 请求组件》
使用 JS 调用
在前端 JS 中访问服务,即可以使用上述3种请求组件,也可以使用页面组件的 request 方法,request 方法定义如下
this.request({
method: method,//请求方法
url: url, //请求地址,支持使用 $serviceName 获取当前服务名
header:{}, //请求头
data: data //请求参数
}).then(res=>{
res.data //请求返回的数据
});
示例代码如下
onJsBtnClick = async (event) => {
let productName = this.comp("pageData").getValue("productName");
let ret = await this.request({
url: "$serviceName/main/fuwu/queryproduct2?productName=" + productName
})
console.log(ret);
}
返回结果输出如下图所示,其中 data 为返回的数据