Гнездо JS как проверить тело перед загрузкой изображения? - PullRequest
1 голос
/ 04 февраля 2020

У меня есть метод контроллера, который получает файл и DTO. Я хотел бы проверить мой DTO перед загрузкой файла.

Я попытался: создать перехватчик проверки, где я могу проверить тело запроса, например:

import { CallHandler, ExecutionContext, Injectable, Logger, NestInterceptor } from '@nestjs/common';
import { Request } from 'express';
import { Observable } from 'rxjs';

@Injectable()
export class ValidationInterceptor implements NestInterceptor {
  private logger = new Logger('ValidatioInterceptor');

  intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
    const request = context.switchToHttp().getRequest<Request>();
    this.logger.verbose(`body: ${JSON.stringify(request.body)}`);
    // TODO validate body
    return next.handle();
  }
}

Затем используйте это в моем контроллере до FileInterceptor, например:

    @Put('/:id')
    @Roles(Role.ADMIN)
    @UseGuards(AuthGuard(), RolesGuard)
    @UseInterceptors(ValidationInterceptor, FileInterceptor('image'))
    updateUserById(
      @Param('id', ParseIntPipe) id: number,
      @Body(ValidationPipe) updateUserDto: UpdateUserDto,
      @UploadedFile() file: any,
    ): Promise<UserModel> {
    ...
   }

Моя проблема в том, что тело всегда пусто в ValidationInterceptor.

Это как-то связано и с этим вопросом, но конкретный ответ не предоставлен: Гнездо js: изображение загружено, даже если проверка тела не удалась

Спасибо за вашу помощь!

...