このドキュメントに従って、小さなNest.jsアプリでswaggerドキュメントを設定しています: https://docs.nestjs.com/recipes/swagger
swagger でスキーマを正しく表示するように dto をセットアップするにはどうすればよいですか? より具体的には、ネストされた型です。最上位のキーのみが表示されます。キーの 1 つが何かのタイプである場合、それは空のオブジェクトとして表示されます。これが私が意味することです:
宛先:
export class HealthCheckDataDto {
serverStatus: {} // dont have it typed yet;
dbStatus: MongoConnectionStateT;
}
闊歩:
[
{
"serverStatus": {},
"dbStatus": {}
}
]
swagger の例の値で期待される結果:
[
{
"serverStatus": {},
"dbStatus": {
"isOnline": true,
"msg": "string"
}
}
]
これは機能です:
@ApiResponse({ status: 200, description: 'blabla', type: [HealthCheckDataDto] })
@ApiResponse({ status: 500, description: 'blabla, but bad', type: [HealthCheckDataDto] })
@Get('/api/healthcheck')
healthCheckApp(@Res() res: Response<HealthCheckDataDto>) {
// check HCs and setup status code
const healthCheck: HealthCheckI = this.healthcheckService.getFullHealthCheck();
const statusCode = (healthCheck.dbStatus.isOnline) ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR;
// return that response
res.status(statusCode).json(healthCheck);
}
私が試したこと:
- dto で正確なパラメーターのタイプを置き換えたところ、swagger で適切に表示されます。
- インターフェイスに対して dto のクロスチェックを行ったところ、「isOnline」に間違ったフィールドを追加したところ、それを見つけて、それが良くないというマークが付けられました。
- スキーマは闊歩で表示されますが、型付けされた部分ではなく、最上位のみも表示されます。したがって、単なる例の値ではありません。
- スタック オーバーフローを確認しました。関連するスレッドが 2 つ見つかりましたが、どちらも解決しませんでした。タイプの代わりに sub-dtos を手動で作成することを提案した人もいました。うーん...私はそれをしないほうがいいです。
私は何か間違ったことをしている、またはドキュメントで何かを見逃しています。または、swagger モジュールのパーサーが、json の生成時にタイプ/インターフェースを抽出できない可能性があります。