Я впервые использую Nest.js и переношу устаревший API node.js. Я создаю первый маршрут, чтобы убедиться, что он сохранит возможности спецификации OpenAPI. Я создал контроллер с одним маршрутом, который принимает тело JSON. Класс body использует декораторы из @nestjs/swagger, и я могу видеть, как схема отображается в пользовательском интерфейсе Swatter при использовании декоратора @Body:
@Controller('my-api')
export class CertificatesController {
@ApiOperation({ })
@Post()
async create(
@Req() req: Request,
@Res() res: Response,
@Body() body: TheBody,
): Promise<Result> {
//...
}
}
Однако в исходном API было свойство description для параметра body, и, похоже, нет способа добавить его в мой TheBody класс. Я попытался добавить к методу декоратор ApiBody, и это позволило мне добавить описание, но это затеняет схему body, в результате чего тип отображается в виде строки вместо схемы, определенной TheBody.
Как добавить описание к параметру body в Nest.js, не удаляя отражение типа, предоставляемое декоратором @Body?





npm i --save class-validator class-transformer (https://docs.nestjs.com/techniques/validation)
npm install --save @nestjs/swagger (https://docs.nestjs.com/openapi/introduction)
Сделайте класс TheBody таким,
import { ApiProperty } from '@nestjs/swagger';
import { IsEmail, IsNotEmpty } from 'class-validator';
export class TheBody {
@ApiProperty({
description: 'The email of the user',
example: '[email protected]',
})
@IsEmail()
email: string;
@ApiProperty({
description: 'The password of the user',
example: 'password',
})
@IsNotEmpty()
password: string;
}
Похоже, что главное — добавить декоратор @ApiBody() к методу маршрута, и, к сожалению, для этого вам также придется избыточно указывать type. В параметрах вашей функции декоратор @Body() не может «слиться» с вашими свойствами @ApiBody().
import { ApiBody } from '@nestjs/swagger';
// ...
@ApiBody({
type: MySchemaClass,
description: 'The description',
})
Здесь показано, как добавлять описания к свойствам схемы, но не к телу маршрута.