import { Module, Global } from '@nestjs/common'; import { ValidationPipe, ParseIntPipe, ParseBoolPipe, ParseArrayPipe, ParseUUIDPipe, DefaultValuePipe, } from '@nestjs/common'; import { ParseDiyFormPipe } from './parse-diy-form.pipe'; /** * 管道模块 - 基础设施层 * 基于 NestJS 官方内置管道 * 参考: https://docs.nestjs.cn/pipes * 对应 Java: @InitBinder + @Valid * * 统一管理所有验证管道,避免重复定义 */ @Global() @Module({ providers: [ // 统一的验证管道配置 { provide: 'VALIDATION_PIPE', useValue: new ValidationPipe({ whitelist: true, // 自动过滤掉没有装饰器的属性 forbidNonWhitelisted: true, // 如果有非白名单属性,抛出错误 transform: true, // 自动转换类型 transformOptions: { enableImplicitConversion: true, // 启用隐式转换 }, validateCustomDecorators: true, // 验证自定义装饰器 exceptionFactory: (errors) => { // 自定义错误格式 const result = errors.map((error) => ({ property: error.property, value: error.value, constraints: error.constraints, })); return new Error(JSON.stringify(result)); }, }), }, { provide: 'PARSE_INT_PIPE', useValue: new ParseIntPipe(), }, { provide: 'PARSE_BOOL_PIPE', useValue: new ParseBoolPipe(), }, { provide: 'PARSE_ARRAY_PIPE', useValue: new ParseArrayPipe({ items: String, separator: ',' }), }, { provide: 'PARSE_UUID_PIPE', useValue: new ParseUUIDPipe(), }, { provide: 'DEFAULT_VALUE_PIPE', useValue: new DefaultValuePipe(''), }, // 业务特定的自定义管道 ParseDiyFormPipe, ], exports: [ 'VALIDATION_PIPE', 'PARSE_INT_PIPE', 'PARSE_BOOL_PIPE', 'PARSE_ARRAY_PIPE', 'PARSE_UUID_PIPE', 'DEFAULT_VALUE_PIPE', // 业务特定的自定义管道 ParseDiyFormPipe, ], }) export class PipesModule {}