angular - 如何实现多个类以多次调用后端系统?
问题描述
我已经实现了必须对不同的 api 进行两次调用并结合响应的模式,如果有更好的方法或最佳实践来完成这些任务,我需要专家的帮助。
在 getBalanceController 调用两个 api 以使用 axios 检索响应中,在以下情况下应该遵循什么好的设计?只是想确保我没有做任何多余的事情。
获取平衡控制器.ts
import {Controller,Body} from 'tsoa';
import {AdminHandler} from "./AdminHandler";
import {ClientHandler} from "./ClientHandler";
export class GetBalanceController extends Controller {
public static async process(@Request() request: ExpressRequest,
response: ExpressResponse): Promise < any > {
try {
const instance = new GetBalanceController();
const data = await instance.execute(request, response);
response.status(200);
response.send(data);
} catch (err) {
response.status(200);
response.send(err.message);
}
}
private _request: IRequestURL[] = [];
constructor() {
super();
}
private async execute(@Request() request: ExpressRequest, response: ExpressResponse): Promise < any > {
buildResponses:any = [];
try {
const _adminData = await AdminHandler.process(request,response);
const _clientData = await ClientHandler.process(request,response);
buildResponses.Details.push(_adminData, _caremarkData);
} catch (err) {
return Promise.reject(err);
}
return buildResponses;
}
}
管理员处理程序.ts
import {Controller,Body} from 'tsoa';
export class AdminHandler extends Controller {
public static async process(@Request() request: any,
response: any): Promise<any> {
try {
const instance = new AdminHandler();
const data = await instance.execute(request);
response.status(200);
response.send(data);
} catch (err) {
response.status(200);
response.send(err.message);
}
}
constructor() {
super();
}
public async execute(@Body() _request: any): Promise<any> {
let result: any;
try {
const url = "adminUrl;
const requestKeys: string[] = Object.keys(_request);
if (requestKeys.length !== 1 ||
!(_request[requestKeys[0]].details && _request[requestKeys[0]].details.tokenId)) {
throw new Error("Invalid request");
}
const response: any = await axios.post(url, _request);
result = response.data;
} catch (err) {
return Promise.reject(err);
}
return Promise.resolve(result);
}
// there will be another method that will be called again from main controller to customize the response.
}
客户端处理程序.ts
import {Controller,Body} from 'tsoa';
export class ClientHandler extends Controller {
public static async process(@Request() request: any,
response: any): Promise<any> {
try {
const instance = new ClientHandler();
const data = await instance.execute(request);
response.status(200);
response.send(data);
} catch (err) {
response.status(200);
response.send(err.message);
}
}
constructor() {
super();
}
public async execute(@Body() _request: any): Promise<any> {
let result: any;
try {
const url = "clientUrl;
const requestKeys: string[] = Object.keys(_request);
if (requestKeys.length !== 1 ||
!(_request[requestKeys[0]].details && _request[requestKeys[0]].details.tokenId)) {
throw new Error("Invalid request");
}
const response: any = await axios.post(url, _request);
result = response.data;
} catch (err) {
return Promise.reject(err);
}
return Promise.resolve(result);
}
// there will be another method that will be called again from main controller to customize the response.
}
解决方案
推荐阅读
- algorithm - 如何改进我的“旋转(滚动/循环排列)阵列”解决方案?
- django - Postgresql 通过 sql 脚本更新,在后端获取通知
- css - MS Edge 上的 CSS 边框问题
- python - 您如何为实时系统实现 Python Gekko 应用程序?
- windows - Windows 10:将 Acrobat Reader 设置为批处理文件中的默认 PDF 阅读器
- android - 有没有办法通过来自服务器的 API 来监听 json 的变化?
- javascript - 在任何其他方法之前运行 for 循环中的第一个 fetch 方法
- sql - 使用 order by 更新查询
- c++ - 如何使用 g++ 安装“Seshat”
- java - 为什么我不能用 OpenJFX 和 Deeplearning4J 编译 maven?