我正在尝试创建一个 DTO 类,负责解析分页查询过滤器。
所以我创建了这个类:
import { Transform } from 'class-transformer';
import { IsNumber, IsOptional, IsEnum, Min } from 'class-validator';
import { SortOrder } from '../enums/SortOrder';
import { toNumber } from '../helpers/toNumber';
export class GenericFilter {
@Transform(({ value }) => toNumber(value, { default: 1 }))
@IsNumber({}, { message: ' "page" atrribute should be a number' })
@Min(1)
public page?: number = 1;
@Transform(({ value }) => toNumber(value, { default: 50 }))
@Min(1)
@IsNumber({}, { message: ' "pageSize" attribute should be a number ' })
public pageSize?: number = 50;
@IsOptional()
public orderBy?: string;
@IsEnum(SortOrder)
@IsOptional()
public sortOrder?: SortOrder = SortOrder.DESC;
}
然后我尝试从其他 DTO 扩展此类以实现特定的过滤情况,如下所示:
import { IsDateString, IsNumber, IsOptional } from 'class-validator';
import { GenericFilter } from 'src/common/interfaces/GenericFilter';
export class OperationLogFilterDto extends GenericFilter {
@IsDateString()
@IsOptional()
public dateFrom?: Date;
@IsDateString()
@IsOptional()
public dateTo?: Date;
@IsNumber()
@IsOptional()
public userId?: number;
}
并像这样使用它:
import { Controller, Get, Query } from '@nestjs/common';
import { OperationLogFilterDto } from './dto/OperationLogFilter.dto';
import { AuditService } from './audit.service';
@Controller('audit')
export class AuditController {
constructor(private service: AuditService) {}
@Get('/operation-logs')
getAllOperationLogs(@Query() filters: OperationLogFilterDto) {
console.log(filters);
return this.service.getOperationLogs(filters);
}
}
问题是控制台日志仅显示父类中的属性,并忽略我发送的包含在
OperationLogFilterDto
中的任何其他过滤器
即:
我该如何解决这个问题?
我刚刚用于测试的请求有一个拼写错误..