首页 > 解决方案 > 如何实现多个类以多次调用后端系统?

问题描述

我已经实现了必须对不同的 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.
}

标签: angulartypescriptdesign-patterns

解决方案


推荐阅读