10

このドキュメントに従って、小さな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 の生成時にタイプ/インターフェースを抽出できない可能性があります。

4

3 に答える 3

1

タイプとパラメーターのドキュメントによると、 どちらかを使用する必要があります

@Body(), @Query(), @Param()

次に、swagger モジュールが自動的にデータを入力します。nest-cli.jsonこれには、ファイルを次のように更新する必要もあります

{
"collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": ["@nestjs/swagger/plugin"]
  }
}

その後、すべてが実行され、生成されます。

これでそれらが自動的に表示されない場合、またはスキーマが空であることが表示されない場合は、dto の少なくとも 1 つのエントリをデコレートしてから@ApiProperty()、ページを更新します。これで物事が完了します。

于 2022-01-02T03:09:23.647 に答える