NestJs中的DTO是否可以继承?

文尼奥

我有一个NestJs Get控制器,用于搜索员工列表。

@Controller('employee')
export class EmployeeController {
    private logger = new Logger('EmployeeController');
    constructor(private employeeService:EmployeeService){}

    @Get()
    @UsePipes(new ValidationPipe({ transform: true }))
    getEmployees(
        @Query() filter:GetEmployeesFilterDto
    ):Promise<Employee[]>{
        console.log(JSON.stringify(filter), filter.batch);
        return this.employeeService.getEmployees(filter);
    }
}

为了支持分页,该方法接受过滤器DTO以接受诸如批大小和页码之类的参数。看到这将成为其他DTO类的通用参数之后,我想到了创建基本过滤器DTO:

export class BaseQueryFilterDto{

    @IsOptional()
    @IsInt()
    @UsePipes(ParseIntPipe)
    batch:number;

    @IsOptional()
    @IsInt()
    @UsePipes(ParseIntPipe)
    skip:number;

}

然后为GetEmployeesFilterDto继承此DTO:

export class GetEmployeesFilterDto extends BaseQueryFilterDto{
    @IsOptional()
    @IsNotEmpty()
    search:string;

    @IsOptional()
    primarySupervisorId:string;

}

运行以下请求http:// localhost:3000 / employee?batch = 30将引发以下异常:

[Nest] 27920   - 02/14/2020, 6:29:54 PM   [ExceptionsHandler] Cannot assign to read only property 'batch' of object '#<GetEmployeesFilterDto>' +606974ms
TypeError: Cannot assign to read only property 'batch' of object '#<GetEmployeesFilterDto>'
    at _loop_1 (C:\ng-proj\nestjs-tutorial\node_modules\class-transformer\TransformOperationExecutor.js:242:47)
    at TransformOperationExecutor.transform (C:\ng-proj\nestjs-tutorial\node_modules\class-transformer\TransformOperationExecutor.js:260:17)
    at ClassTransformer.plainToClass (C:\ng-proj\nestjs-tutorial\node_modules\class-transformer\ClassTransformer.js:17:25)    at Object.plainToClass (C:\ng-proj\nestjs-tutorial\node_modules\class-transformer\index.js:20:29)
    at ValidationPipe.transform (C:\ng-proj\nestjs-tutorial\node_modules\@nestjs\common\pipes\validation.pipe.js:55:41)
    at transforms.reduce (C:\ng-proj\nestjs-tutorial\node_modules\@nestjs\core\pipes\pipes-consumer.js:15:33)
    at process._tickCallback (internal/process/next_tick.js:68:7)

但是,当我将所有属性从超类移至GetEmployeesFilterDto时,如下所示:

export class GetEmployeesFilterDto extends BaseQueryFilterDto{
    @IsOptional()
    @IsNotEmpty()
    search:string;

    @IsOptional()
    primarySupervisorId:string;

    //Moved from BaseQueryFilterDto
    @IsOptional()
    @IsInt()
    @UsePipes(ParseIntPipe)
    batch:number;

    @IsOptional()
    @IsInt()
    @UsePipes(ParseIntPipe)
    skip:number;

}

该请求成功运行。我在这里错过了什么吗?还是不能在NestJs中实现对控制器DTO的继承?

文尼奥

感谢@JayMcDoniel指出我不应该@UsePipes()在属性上使用它。

这是适合我的解决方案。

export class BaseQueryFilterDto{

    @IsOptional()
    @Type(() => Number)
    batch:number;

    @IsOptional()
    @Type(() => Number)
    skip:number;

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NestJS中的模型与DTO

来自分类Dev

NestJS是否需要DTO和实体?

来自分类Dev

是否可以继承CAAnimation?

来自分类Dev

在Nestjs中禁止DTO的特定枚举值

来自分类Dev

是否可以从JavaScript中的ECMAScript 6类继承旧式类?

来自分类Dev

在struts.xml中,是否可以从多个包中继承?

来自分类Dev

是否可以从BaseClass继承抽象方法主体中的注释?

来自分类Dev

是否可以停止从HTML标签继承shadowDom中的CSS?

来自分类Dev

是否可以从继承的策略中忽略或隐藏输出声明?

来自分类Dev

是否可以从BaseClass继承抽象方法主体中的注释?

来自分类Dev

是否可以从Java中的多个抽象类继承?

来自分类Dev

是否可以隐藏类的继承?

来自分类Dev

是否可以部分继承ParseObject?

来自分类Dev

是否可以从递归生成的类继承?

来自分类Dev

是否可以通过虚拟支持多重继承?

来自分类Dev

是否可以从std :: basic_string继承?

来自分类Dev

是否可以创建从AVCaptureDevice继承的类?

来自分类Dev

是否可以“继承” xUnit.net的测试?

来自分类Dev

是否可以继承Azure DevOps Pipeline的定义?

来自分类Dev

是否可以继承默认的IShellFolder实现?

来自分类Dev

是否可以不继承CSS规则?

来自分类Dev

是否可以从Postgres中的另一个表空间继承表?

来自分类Dev

从Kotlin中的Any显式继承-是否可以以及如何完成?

来自分类Dev

是否可以在继承的类中公开具有相同名称的受保护常量?

来自分类Dev

在C ++中,是否可以使一个类从其成员类之一继承?

来自分类Dev

是否可以在继承自yii2中ActiveRecord的模型中上传文件?

来自分类Dev

是否可以在C ++ Actor Framework中对类型化actor使用继承?

来自分类Dev

是否可以在ES6继承的类中调用超级设置程序?

来自分类Dev

是否可以从继承的类中隐式地将属性分配给类?

Related 相关文章

  1. 1

    NestJS中的模型与DTO

  2. 2

    NestJS是否需要DTO和实体?

  3. 3

    是否可以继承CAAnimation?

  4. 4

    在Nestjs中禁止DTO的特定枚举值

  5. 5

    是否可以从JavaScript中的ECMAScript 6类继承旧式类?

  6. 6

    在struts.xml中,是否可以从多个包中继承?

  7. 7

    是否可以从BaseClass继承抽象方法主体中的注释?

  8. 8

    是否可以停止从HTML标签继承shadowDom中的CSS?

  9. 9

    是否可以从继承的策略中忽略或隐藏输出声明?

  10. 10

    是否可以从BaseClass继承抽象方法主体中的注释?

  11. 11

    是否可以从Java中的多个抽象类继承?

  12. 12

    是否可以隐藏类的继承?

  13. 13

    是否可以部分继承ParseObject?

  14. 14

    是否可以从递归生成的类继承?

  15. 15

    是否可以通过虚拟支持多重继承?

  16. 16

    是否可以从std :: basic_string继承?

  17. 17

    是否可以创建从AVCaptureDevice继承的类?

  18. 18

    是否可以“继承” xUnit.net的测试?

  19. 19

    是否可以继承Azure DevOps Pipeline的定义?

  20. 20

    是否可以继承默认的IShellFolder实现?

  21. 21

    是否可以不继承CSS规则?

  22. 22

    是否可以从Postgres中的另一个表空间继承表?

  23. 23

    从Kotlin中的Any显式继承-是否可以以及如何完成?

  24. 24

    是否可以在继承的类中公开具有相同名称的受保护常量?

  25. 25

    在C ++中,是否可以使一个类从其成员类之一继承?

  26. 26

    是否可以在继承自yii2中ActiveRecord的模型中上传文件?

  27. 27

    是否可以在C ++ Actor Framework中对类型化actor使用继承?

  28. 28

    是否可以在ES6继承的类中调用超级设置程序?

  29. 29

    是否可以从继承的类中隐式地将属性分配给类?

热门标签

归档