typescript NestJS:处理在DTO中具有构造函数的PATCH中的嵌套主体有效负载

isr3a4wc  于 2023-03-19  发布在  TypeScript
关注(0)|答案(1)|浏览(164)

在我的NestJS中,我有一个如下所示的DTO对象:

export class Protocol {
  public enabled?: boolean;
  public allowed?: boolean;
  constructor(enabled: boolean, allowed: boolean) { // It has a constructor
    this.enabled = enabled;
    this.allowed = allowed;
  }
}

现在我想在一个RequestDTO中使用相同的协议来处理我的PATCH请求。
控制器:

modifySomething(@Param('id') id: string, @Param('uuid') uuid: string, @Body() body: ModifyRequest) {
    return this.service.modify(id, uuid, body);
  }

在我的DTO(ModifyRequest)中:

export class Protocol {
  public enabled?: boolean;
  public allowed?: boolean;
  constructor(enabled: boolean, allowed: boolean) { // It has a constructor
    this.enabled = enabled;
    this.allowed = allowed;
  }
}

export class ModifyRequest {
  public name?: string;
  public nfs?: Protocol;
}

现在我的问题是:
我怎样才能正确地将传入的请求@BodyMap到这个DTO对象。以下是我在发布到这里之前尝试过的事情:
1.如果我删除了构造函数,那么它将工作。但是我不能删除它,因为它有一些其他的依赖项。
1.我还尝试了class-transformer,如下所示:class-transformer,如下所示:

import { Type } from 'class-transformer';
   export class ModifyRequest {
      public name?: string;
      @Type(()=>Protocol)
      public nfs?: Protocol;
   }

然而,它没有工作:(
我希望在Response(必须有构造函数)和RequestDTO中使用相同的Protocol
内斯季斯

owfi6suc

owfi6suc1#

这是我如何通过class-transformer管理它的:

import { Type } from 'class-transformer';

   export class ModifyRequest {
      public name?: string;
      @Transform(({ value }) => {
         return new Protocol(value.enabled, value.allowed);
      })
      public nfs?: Protocol;

它起作用了。
不确定是否有更好的技巧来处理它通过class-transformer没有一个new。如果有人知道,请一定让我知道。

相关问题