ウェブサイト検索

node.js - NestJS (node) - ジェネリック型によるリクエストの検証


私は2つのNestJSコントローラーを持っています

export class ParentController<T> {
    constructor(protected service: Service<T>) {}

    @Post()
    do(@Body() dto: ClassType<T>): Promise<T> {
        return this.service.do(dto);
    }
}

... そして別のコントローラーは、親を拡張します

@Controller('any')
export class AnyController extends ParentController<Entity> {
  constructor(protected service: Service) {
      super(service);
  }
}

ご覧の通り、TypeORMのエンティティはジェネリクスを通じてこのコントローラーにTとして結び付けられています。"do(...)"メソッドでは、バリデーションの型としてClassTypeを使用しましたが、エラーもなくバリデーションは全くトリガーされません。私の理解では、DTOとして定義するには正確にクラスが必要であり、型だけでは不十分です。

私の質問は次の通りです:親コントローラーで Entity 自体を使用せずに、ただ自分の Entity 型だけを使ってメソッド "do(...)" にバリデーションを適用するにはどうすれば良いでしょうか。ジェネリクスは JS のランタイムには存在しないことは知っていますし、この機能なしで抽象コントローラーを作るのは難しいです。

追伸:nestjsx/crud コンポーネントを使わずにそれを行う必要があります

回答 #1

あなたはその方法でそれを行うことはできません。実際、それが私がnestjsx/crudパッケージを作成した理由の一つで、そこでは@Crud()デコレーターを使い、バリデーションのためにエンティティタイプを渡します。

もう一つのオプションとして、ミキシンを作成してそこにエンティティを渡すことができます。