Backend

管道

Malagu 框架在中间件与请求处理器之间加了一层管道,当然我们也可以将管道应用在其他位置。管道的作用是在真正的方法执行之前处理与方法参数相关的工作。比如方法参数合法性验证、参数类型转换等等。其中,框架的数据校验功能就是基于管道来实现的。

管道转换器

我们可以实现以下管道转换器接口,并以PipeTransform为 ID 注入到 IoC 容器,即可实现自定义的管道转换器。

export interface PipeTransform<T = any, R = any> {
  readonly priority: number;
  transform(value: T, metadata: ArgumentMetadata): R;
}

transform  方法参数说明:

  • value  被执行方法的某个参数值
  • metadata  被执行方法某个参数元数据,可以获取参数类型,以及额外的信息

管道管理器

为了方便在需要的地方应用管道转换器,框架提供了一个管道管理器 PipeManagerPipeManager已经提供了默认实现,我们也可以通过 IoC 容器的替换能力去替换掉默认实现,绝大多数情况下,默认实现已经足够了,我们无需替换。使用PipeManager作为 ID 将 PipeManager的默认实现注入我们的类中,就可以使用该默认实现了。PipeManager的接口定义如下:

export interface PipeManager {
  apply(metadata: MethodMetadata, args: any[]): Promise<void>;
}

apply方法参数说明:

  • metadata:被执行方法的元数据
  • args:被执行方法的所有参数值

Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号