TreeviewCopyright © aleen42 all right reserved, powered by aleen42
网络请求 Proxy
接口调用API
- 接口调用目前分为两种情况,提供不同的API来使用;
- 1、在有当前页面模型viewModel的情况,框架自动处理封装了dominKey参数,使用viewModel.setProxy() API来进行接口请求;
- 2、在没有当前页面模型viewModel的情况下(比如门户页面扩展,就没有viewModel),使用cb.rest.DynamicProxy() API来实现接口请求;
viewModel.setProxy()
- 有ViewModel时的情况,框架自动处理domainKey参数
- 默认是异步调用,可以配合promise以及 async、await来封装使用
示例
// 声明
const proxy = viewModel.setProxy({
saveLog: {
url: '/xxx/xxx/saveByToken',
method: 'POST',
options: {
mask: false
}
}
});
// 调用
proxy.saveLog(params, function (data) {
console.log('success', data)
})
- 参数说明:
参数 | 含义 | 是否必输 | 类型 | 默认值 | 可取值 |
---|---|---|---|---|---|
url | 请求地址 | 是 | String | 无 | 后端请求接口url |
method | 请求类型 | 是 | String | 无 | GET 或 POST |
options | 参数 | 否 | Object | 无 | |
--mask | 是否显示Loading | 否 | boolean | true | true 或 false |
--uniform | 是否走统一Node路由转发 | 否 | boolean | true | true 或 false |
--async | 是否同步请求 | 否 | boolean | false | true 或 false |
--deflate | 是否压缩加密传输 | 否 | boolean | false | true 或 false |
--timeout | 超时时间,毫秒级别 | 否 | number | 无 | |
--contentType | 请求头类型 | 否 | String | application/json;charset=utf-8 | |
--domainKey | 目标服务domainKey | 否 | String | 默认取本领域 | |
--dateType | 数据类型 | 否 | String | 无 | json 或 file |
callback | 请求回调函数 | 是 | function | 无 | |
params | 上送业务参数 | 是 | Object | 无 |
- 异步请求改为同步请求的两种方式:
- 1、在options里面的async改为true
示例:
// 声明
const proxy = viewModel.setProxy({
saveLog: {
url: '/xxx/xxx/saveByToken',
method: 'POST',
options: {
mask: false,
// 开启同步请求
async:true
}
}
});
// 调用
proxy.saveLog(params, function (data) {
console.log('success', data)
})
- 2、通过生成的proxy对象的Sync(自定义的saveLog+Sync的拼接)方法
示例:
// 声明
const proxy = viewModel.setProxy({
saveLog: {
url: '/xxx/xxx/saveByToken',
method: 'POST',
options: {
mask: false,
}
}
});
// 同步调用
const data = proxy.saveLogSync(param);
cb.rest.DynamicProxy()
- 无ViewModel时的情况,需要自行传入domainKey参数
- 默认是异步调用,可以配合promise以及 async、await来封装使用
示例
// 声明
const proxy = cb.rest.DynamicProxy.create({
ensure: {
url: '/xxx/xxx/autoPick',
method: 'POST'
}
});
// 调用
proxy.ensure(params, function (err, result) {
console.log('success', result)
})
- 参数说明:
参数 | 含义 | 是否必输 | 类型 | 默认值 | 可取值 |
---|---|---|---|---|---|
url | 请求地址 | 是 | String | 无 | 后端请求接口url |
method | 请求类型 | 是 | String | 无 | GET 或 POST |
options | 参数 | 否 | Object | 无 | |
--domainKey | 目标服务domainKey | 是 | String | 无 | |
callback | 请求回调函数 | 是 | function | 无 | |
params | 上送业务参数 | 是 | Object | 无 |
与promise配合使用,以及async\await配合使用示例
// 配合promise声明
const httpAjax = (method, url, payload = {}) => {
return new Promise((resolve, reject) => {
cb.rest.DynamicProxy.create({
ensure: {
url,
method,
options: {
domainKey: ''
}
}
}).ensure(payload, (err, res) => {
if (err) {
reject(err);
} else {
resolve(res);
}
});
});
};
// 提取get请求
const httpGet = (url, payload) => {
return httpAjax('GET', url, payload);
};
// 提取post请求
const httpPost = (url, payload) => {
return httpAjax('POST', url, payload);
};
// 配合async await 调用
const getTableData = async () => {
try {
const data = await httpPost(
'/api/v1/monitor/SpcMonitorDefineList',
{
a:xxx
}
);
} catch (error) {
cb.utils.alert(error);
}
};
下载文件
- 使用createDownloadForm() API 来下载文件
下载示例
viewModel.get('xxxx按钮').on(v'click', () => {
const data = {};
const prefix = cb.utils.getServiceUrl();
const url = `${prefix}/files/xxx?domainKey=domainxxxxx`;
const { common } = ViewModel.biz.action()
common.createDownloadForm({
url,
params: data,
callback: function(code){
// code 为1时,下载成功 值为0时 下载失败
}
});
});
/**
* 1. 后端需要的参数可以放到data里
* 2. xxx 为后端接口(确保能返回流文件)
* 3. domainxxxxx为当前领域domainKey
*/
- 参数说明:
参数 | 含义 | 是否必输 | 类型 | 默认值 | 可取值 |
---|---|---|---|---|---|
url | 下载地址 | 是 | String | 无 | |
params | 后端接收的参数 | 否 | Object | 无 | |
callback | 文件下载后的回调函数 | 否 | function | 无 | 返回code,值为1时,下载成功 值为0时 下载失败 |