Size: a a a

NestJS — русскоязычное сообщество

2020 April 03

YD

Yaroslav D in NestJS — русскоязычное сообщество
проблема в том, что я могу описать или тело или файл
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
Всем привет, такой вопрос как вы описываете типы в сваггере для файлов когда у вас есть и файл и еще какое-то body?
над методом контроллера
@ApiConsumes('multipart/form-data')
@ApiImplicitFile({ name: 'fieldName', required: false, description: 'Description' })

@UploadedFile() uploadedFile: TypeUploadedFile
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
над методом контроллера
@ApiConsumes('multipart/form-data')
@ApiImplicitFile({ name: 'fieldName', required: false, description: 'Description' })

@UploadedFile() uploadedFile: TypeUploadedFile
тогда будет описание только файла
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
тогда будет описание только файла
ну и для DTO опиши над полями
@ApiConsumes('multipart/form-data')
@ApiImplicitFile({ name: 'fieldName', required: false, description: 'Description' })
public async example(
       @Body() body: bodyDto,
       @UploadedFile() resume: TypeUploadedFile,
   ) {
   }
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
ну и для DTO опиши над полями
@ApiConsumes('multipart/form-data')
@ApiImplicitFile({ name: 'fieldName', required: false, description: 'Description' })
public async example(
       @Body() body: bodyDto,
       @UploadedFile() resume: TypeUploadedFile,
   ) {
   }
так в том то и проблема, твой ApiImplicitFile в середине юзает ApiBody через это все, что я в дто описал будет пропущено
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
так в том то и проблема, твой ApiImplicitFile в середине юзает ApiBody через это все, что я в дто описал будет пропущено
у меня работает, не знаю что ты там делаешь
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
у меня работает, не знаю что ты там делаешь
Ну в принципе ApiImplicitFile удалили, это декоратор с старой версии, возможно сейчас поведение изменилась
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
у меня работает, не знаю что ты там делаешь
То есть если я опишу руками тип для файла (описал согласно документации), типы из тела пропадают, не опишешь то будет тело без файла
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
То есть если я опишу руками тип для файла (описал согласно документации), типы из тела пропадают, не опишешь то будет тело без файла
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
Какая у тебя версия свагера?
Декоратор о котором ты писал вырезали в 3
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
Какая у тебя версия свагера?
Декоратор о котором ты писал вырезали в 3
только что поставил последнюю версию, все с доки, ничего нового не придумал
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
Какая у тебя версия свагера?
Декоратор о котором ты писал вырезали в 3
import { Controller, Get, Post, Body, UploadedFile, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { ApiProperty, ApiConsumes, ApiBody } from '@nestjs/swagger';
import { FileInterceptor } from '@nestjs/platform-express';

class BodyDto {
       @ApiProperty()
       public field: number;

       @ApiProperty()
       public someField: string;

       @ApiProperty({ type: 'string', format: 'binary' })
       public file: any;
}

@Controller()
export class AppController {
 constructor(private readonly appService: AppService) {}

 @ApiBody({ type: BodyDto, description: 'desc' })
 @ApiConsumes('multipart/form-data')
 @UseInterceptors(FileInterceptor('file'))
 @Post()
 example(
       @Body() body: BodyDto,
       @UploadedFile() file
 ): BodyDto {
       console.log(body, file)
       return body;
 }
}
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
import { Controller, Get, Post, Body, UploadedFile, UseInterceptors } from '@nestjs/common';
import { AppService } from './app.service';
import { ApiProperty, ApiConsumes, ApiBody } from '@nestjs/swagger';
import { FileInterceptor } from '@nestjs/platform-express';

class BodyDto {
       @ApiProperty()
       public field: number;

       @ApiProperty()
       public someField: string;

       @ApiProperty({ type: 'string', format: 'binary' })
       public file: any;
}

@Controller()
export class AppController {
 constructor(private readonly appService: AppService) {}

 @ApiBody({ type: BodyDto, description: 'desc' })
 @ApiConsumes('multipart/form-data')
 @UseInterceptors(FileInterceptor('file'))
 @Post()
 example(
       @Body() body: BodyDto,
       @UploadedFile() file
 ): BodyDto {
       console.log(body, file)
       return body;
 }
}
Ну так подожди, ты описал тип файла и боди в одном дто, а файла в боди не будет
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
Ну так подожди, ты описал тип файла и боди в одном дто, а файла в боди не будет
его там и не было никогда
он отдельно был и в старой версии
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
его там и не было никогда
он отдельно был и в старой версии
Я о том, что у тебя тип body это BodyDto в котором файл есть, хотя это не так
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
Yaroslav D
Я о том, что у тебя тип body это BodyDto в котором файл есть, хотя это не так
Я не о присутствии в рантайме, а на этапе типов
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav D
Я о том, что у тебя тип body это BodyDto в котором файл есть, хотя это не так
ты б сначала описал всю ситуацию
а то с первого раза понятно только то что у тебя не получалось написать swagger для загрузки файлов

теперь понял
в пред версии свагера не нужно было поле писать
источник

YD

Yaroslav D in NestJS — русскоязычное сообщество
L K
ты б сначала описал всю ситуацию
а то с первого раза понятно только то что у тебя не получалось написать swagger для загрузки файлов

теперь понял
в пред версии свагера не нужно было поле писать
ну ок, может действительно описал недостаточно подробно, но как все же решить это (
источник

VO

Vasiliy Onoprienko in NestJS — русскоязычное сообщество
Подскажите как можно используя class-validator и имея два поля {isOne: true; isTwo: false} валидировать чтобьі они всегда бьіли true, false или false, true
источник

LK

L K in NestJS — русскоязычное сообщество
Vasiliy Onoprienko
Подскажите как можно используя class-validator и имея два поля {isOne: true; isTwo: false} валидировать чтобьі они всегда бьіли true, false или false, true
достаточно что бы они были просто boolean
ты об этом не думал ?
раз ты перечислил по сути все вариации которые могут быть с этими 2 полями
если я правильно понял вопрос
источник