Swagger如何记录NestJS可重用枚举?

k4ymrczo  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(150)

有没有人有一个简单的方法来使用swagger在nestjs中记录可重用的枚举?我不是说在请求中显示它们作为选项。我希望记录枚举本身,因为它们本身不是很容易理解:

export enum ScanState {
  SCAN_WAITING_FOR_CAPTURE_DATA = 'SCAN_WAITING_FOR_CAPTURE_DATA',
  SCAN_VALIDATING_CAPTURE_DATA = 'SCAN_VALIDATING_CAPTURE_DATA',
  SCAN_CAPTURE_DATA_VALID = 'SCAN_CAPTURE_DATA_VALID',
  SCAN_CAPTURE_DATA_INVALID = 'SCAN_CAPTURE_DATA_INVALID',
}

我认为应该有某种@Schema@ApiAdditionalProperty或其他东西,我可以添加到文档的枚举顶部,然后将其添加到Swagger文档的Schemas部分,类似于它已经与类一起工作的方式。我使用@nestjs/swagger版本6.0.4。
这似乎是一个典型的Swagger/NestJS问题,但我在其他地方找不到好的解决方案。谢谢,任何帮助都非常感谢!

u4vypkhs

u4vypkhs1#

我的最终解决方案是创建一些描述和属性常量,如下所示:

export enum ScanState {
  SCAN_WAITING_FOR_INPUT = 'SCAN_WAITING_FOR_INPUT',
  SCAN_VALIDATING_INPUT = 'SCAN_VALIDATING_INPUT',
  SCAN_INPUT_VALID = 'SCAN_INPUT_VALID',
  SCAN_INPUT_INVALID = 'SCAN_INPUT_INVALID',
}

export const scanStates = Object.values(ScanState);

export const scanStateDescription = `
* \`${ScanState.SCAN_WAITING_FOR_INPUT}\`: description
* \`${ScanState.SCAN_VALIDATING_INPUT}\`: description
* \`${ScanState.SCAN_INPUT_VALID}\`: description
* \`${ScanState.SCAN_INPUT_INVALID}\`: description
`;

export const scanStateApiProperty: ApiPropertyOptions = {
  enum: scanStates,
  example: ScanState.SCAN_INPUT_VALID,
  description: `The current state of the scan. The following states are possible: ${scanStateDescription}`,
};

然后,在正在记录的dto中,我将属性const添加到字段中:

@ApiProperty(scanStateApiProperty)
state: ScanState;

这导致swagger文档看起来像这样:

不是我最喜欢的解决方案,但它能完成工作!希望这能帮助别人,如果他们在未来遇到同样的事情:-)

相关问题