导言

  • 本文已参加「开源摘星打算」,欢送正在浏览的你退出。流动链接:https://github.com/weopenproj...
  • 无论是restfull格调API还是其余,对立的应答格局都是必要的。应答格局的统一使得接口标准、对立,接口也便于保护。
  • 本文将举例手摸手讲述对立应答格局在malagu中的实际,其中也蕴含自定义异样的实现。

我的项目构造

红框文件:对立应答格局与自定义异样文件

对立应答格局实现

  • 1.定义ResponseData接口,文件:response-data.ts

    export interface ResponseData<T> {  code: 1 | number,  data: T | null,  message: string}
  • 2.定义应答后果格式化函数responseJson,文件:format-util.ts

    /* 格式化工具 * @Author: pwzhang  * @Date: 2022-08-18 17:03:40  * @Last Modified by: pwzhang * @Last Modified time: 2022-08-18 17:17:53 */import { ResponseData } from "../../common/data/response-data";/** * 接口响应后果格式化 * @param data [any] 返回体 * @param error [error | string] 错误信息|谬误形容 * @returns {  * code, 0-失败;1-胜利 * data,  * message 谬误形容  * } */export const responseJson = <T>(data: T, error: any = null) : ResponseData<T> => {  let code: 0 | 1 = error ? 1 : 0;  let message: string = error ? (error.message || error) : '';  return { code, data, message };}
  • 3.在controller中利用responseJson函数

      @Get("/:userId")  @Json()  @Authenticated()  async getUserInfo(@Param("userId") userId: number) {      this.logger.info(`获取用户信息:${userId}`)      const result = await this.userInfoService.getUserInfo(userId);      return responseJson(result)  }

    应答后果:

至此,胜利应答的对立格局就实现了,接下来联合自定义异样的实现来工夫失败的应答

自定义异样的实际

  • 1.自定义异样类WebCunstomError,文件:web-cunstom-error.ts

    import { CustomError } from "@malagu/core";/* * @Author: pwzhang  * @Date: 2022-08-07 18:51:21  * @Last Modified by: pwzhang * @Last Modified time: 2022-08-19 14:56:01 */export class WebCunstomError extends CustomError {    constructor(public message: string = "未知的异样") {      super(message);  }    }
  • 2.自定义异样处理器WebCustomErrorHandler,文件:web-custom-error-hander.ts

    import { Autowired, Component, Logger } from "@malagu/core";import { Context, ErrorHandler, HTTP_ERROR_HANDLER_PRIORITY, } from "@malagu/web/lib/node";import { responseJson } from "../../node/utils/format-util";import { WebCunstomError } from "../error/web-custom-error";/* * @Author: pwzhang  * @Date: 2022-08-07 18:24:19  * @Last Modified by: pwzhang * @Last Modified time: 2022-08-19 15:59:55 */@Component([WebCustomErrorHandler, ErrorHandler])export class WebCustomErrorHandler implements ErrorHandler {  readonly priority: number = HTTP_ERROR_HANDLER_PRIORITY;  @Autowired(Logger)  protected logger: Logger;  canHandle(ctx: Context, err: Error): Promise<boolean> {      return Promise.resolve(err instanceof WebCunstomError)  }  async handle(ctx: Context, err: WebCunstomError): Promise<void> {      // 完结线程      ctx.response.end(JSON.stringify(responseJson(null, err)));  }}
  • 3.在service或controller文件中的利用自定义异样

      async queryUserList(page: number, size: number, args: any ): Promise<any> {       throw new WebCunstomError("我是自定义异样");  }

    谬误应答后果

结语

思考

  • 应用try catch捕捉异样后,日志不输入异样信息

本文为学习类文章,如有谬误欢送斧正!思考内容欢送各位大佬答疑解惑。