将 NestJs 上的参数值更改为另一个现有的 class

Change parameters values on NestJs to another existant class

我有两个带有一些字符串参数的 classes,我想将参数类型重构为 class。

export class CreateUpdateParcoursDto {
  @IsOptional()
  @IsString()
  @IsNotEmpty()
  startingNode: string;

  @IsNotEmpty()
  @ValidateNested()
  @Type(() => Category)
  category: Category;
}
@Entity()
export class Node {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  // Exp: name = "Validation de l'intention du cient"
  @Column({ unique: true })
  name: string;

  // Relation n-> n avec l'objet Connection
  @ManyToMany(() => Connection, (connection) => connection.nodes, {
    cascade: true,
    eager: true,
  })
  @JoinTable()
  connections: Connection[];

  // Relation n-> 1 avec l'objet Action
  @ManyToOne(() => Action, (action) => action.nodes)
  action: Action;
}

我想将 startingNode string 类型更改为 Node 类型,但我不知道应该在我的 controller 文件中使用或更改哪些关系,service文件和 repository 文件

转到您的 main.ts 文件并添加 tihs 行

async function bootstrap() {
    const app = await NestFactory.create(AppModule, {
        logger: ['debug', 'error'],
        cors: true
    });
    const document = SwaggerModule.createDocument(app, config);
    SwaggerModule.setup('api', app, document);

    app.useGlobalPipes(new ValidationPipe({
      transform: true // this line here in your validationPipe
    }));
    await app.listen(3000);
}
bootstrap();

然后你可以进入你的dto文件并调用@Transform装饰器

export class CreateUpdateParcoursDto {
  @IsOptional()
  @IsString()
  @IsNotEmpty()
  @Transform(({ value }) => new Node({name: value})
  startingNode: Node;

  @IsNotEmpty()
  @ValidateNested()
  @Type(() => Category)
  category: Category;
}

最后一步,您可以在实体构造函数中获取初始参数

@Entity()
export class Node {
  constructor({name}) {
    this.name = name
  }
  @PrimaryGeneratedColumn('uuid')
  id: string;

  // Exp: name = "Validation de l'intention du cient"
  @Column({ unique: true })
  name: string;

  // Relation n-> n avec l'objet Connection
  @ManyToMany(() => Connection, (connection) => connection.nodes, {
    cascade: true,
    eager: true,
  })
  @JoinTable()
  connections: Connection[];

  // Relation n-> 1 avec l'objet Action
  @ManyToOne(() => Action, (action) => action.nodes)
  action: Action;
}