#nestjs #nestjs-swagger
#nestjs #nestjs-развязность
Вопрос:
В настоящее время я использую @ApiExcludeEndpoint() ### поверх всех методов, чтобы скрыть конечную точку в пользовательском интерфейсе swagger, например:
import { Controller, Get, Query, Param } from '@nestjs/common';
import { ResourceService } from './resource.service';
import { Auth } from 'src/auth/auth.decorator';
import {
ApiTags,
ApiSecurity,
ApiOkResponse,
ApiForbiddenResponse,
ApiCreatedResponse,
ApiExcludeEndpoint
} from '@nestjs/swagger';
@Controller()
@ApiTags('Resources')
@ApiSecurity('apiKey')
export class ResourceController {
constructor(private readonly resourceService: ResourceService) {}
@Get('get_url')
@ApiExcludeEndpoint()
@Get()
@ApiOkResponse({
description: 'Resources list has succesfully been returned',
})
@ApiForbiddenResponse({ description: 'You are not allowed' })
@Auth(...common_privileges)
findAll(@Query() query: any): any {
......
}
@Get('get_url/:id')
@ApiExcludeEndpoint()
@ApiOkResponse({ description: 'Resource has succesfully been returned' })
@ApiForbiddenResponse({ description: 'You are not allowed' })
@Auth(...common_privileges)
findById(@Param('id') id: string, @Query() query: any): any {
......
}
}
Мне нужно знать, есть ли способ скрыть все конечные точки в контроллере с помощью одного декоратора, я проверил некоторые документы, в которых говорится об использовании @ApiIgnore() и @Hidden(), но я не могу найти их в nestjs-swagger. Пожалуйста, прокомментируйте это
Ответ №1:
Одна из возможностей — явно включить модули, которые вы хотели бы включить в документы swagger, вместо того, чтобы просто «включать все модули» по умолчанию. Пример:
const options = new DocumentBuilder()
.setTitle('Cats example')
.setDescription('The cats API description')
.setVersion('1.0')
.addTag('cats')
.build();
const catDocument = SwaggerModule.createDocument(app, options, {
include: [LionsModule, TigersModule], // don't include, say, BearsModule
});
SwaggerModule.setup('api/cats', app, catDocument);
Без явного include:[]
свойства, LionsModule
, TigersModule
, и BearsModule
будет автоматически включено.
Ответ №2:
Чтобы скрыть всю конечную точку в controller.ts, вы должны использовать ApiExcludeController вместо ApiExcludeEndpoint, как в примере.
https://docs.nestjs.com/openapi/decorators
import { Controller, Get, Query, Param } from '@nestjs/common';
import { ResourceService } from './resource.service';
import { Auth } from 'src/auth/auth.decorator';
import {
ApiTags,
ApiSecurity,
ApiOkResponse,
ApiForbiddenResponse,
ApiCreatedResponse,
ApiExcludeController
// ApiExcludeEndpoint
} from '@nestjs/swagger';
@Controller()
@ApiTags('Resources')
@ApiSecurity('apiKey')
@ApiExcludeController()
export class ResourceController {
constructor(private readonly resourceService: ResourceService) {}
@Get('get_url')
// @ApiExcludeEndpoint()
@Get()
@ApiOkResponse({
description: 'Resources list has succesfully been returned',
})
@ApiForbiddenResponse({ description: 'You are not allowed' })
@Auth(...common_privileges)
findAll(@Query() query: any): any {
......
}
@Get('get_url/:id')
// @ApiExcludeEndpoint()
@ApiOkResponse({ description: 'Resource has succesfully been returned' })
@ApiForbiddenResponse({ description: 'You are not allowed' })
@Auth(...common_privileges)
findById(@Param('id') id: string, @Query() query: any): any {
......
}
}