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()デコレーターを使い、バリデーションのためにエンティティタイプを渡します。
もう一つのオプションとして、ミキシンを作成してそこにエンティティを渡すことができます。