80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
|
|
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 {}
|