Malagu 框架在中间件与请求处理器之间加了一层管道,当然我们也可以将管道应用在其他位置。管道的作用是在真正的方法执行之前处理与方法参数相关的工作。比如方法参数合法性验证、参数类型转换等等。其中,框架的数据校验功能就是基于管道来实现的。
管道转换器
我们可以实现以下管道转换器接口,并以 PipeTransform
为 ID 注入到 IoC 容器,即可实现自定义的管道转换器。
export interface PipeTransform<T = any, R = any> {
readonly priority: number;
transform(value: T, metadata: ArgumentMetadata): R;
}
transform
方法参数说明:
value
被执行方法的某个参数值metadata
被执行方法某个参数元数据,可以获取参数类型,以及额外的信息
管道管理器
为了方便在需要的地方应用管道转换器,框架提供了一个管道管理器 PipeManager
。PipeManager
已经提供了默认实现,我们也可以通过 IoC 容器的替换能力去替换掉默认实现,绝大多数情况下,默认实现已经足够了,我们无需替换。使用 PipeManager
作为 ID 将 PipeManager
的默认实现注入我们的类中,就可以使用该默认实现了。PipeManager
的接口定义如下:
export interface PipeManager {
apply(metadata: MethodMetadata, args: any[]): Promise<void>;
}
apply
方法参数说明:
metadata
被执行方法的元数据args
被执行方法的所有参数值