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

管道转换器

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

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

transform 方法参数说明:

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

管道管理器

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

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

apply 方法参数说明:

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