Пустое тело запроса в гнезде js охранник (ошибка?) - PullRequest
0 голосов
/ 18 июня 2020
    @Post()
    @UseGuards(
        CategoryVerificationGuard,
        VerboseAuthGuard,
        UniqueEntryTitleGuard,
    )
    @UseInterceptors(FileFieldsInterceptor([
        { name: AttachmentsName.IMAGES, maxCount: AttachmentMaxCount.IMAGES },
    ]))
    public async createEntry(@UploadedFiles() attachedFiles: IUploadFile[],
                             @Body() createEntryBodyDto: CreateEntryBodyDto,
                             @Headers('authorization') authHeader: string): Promise<any> {
        return this.entryService.create(getUserIdByAuthHeader(authHeader), {attachedFiles, ...createEntryBodyDto});
    }

Код охранника:

@Injectable()
export class CategoryVerificationGuard implements CanActivate {
    constructor(
        // private readonly categoriesService: CategoriesService,
    ) {}

    public async canActivate(ctx: ExecutionContext): Promise<boolean> {
        const request = ctx.switchToHttp().getRequest<Request>();
        const requestBody: IConfirmationCodeValidation = request.body;
        const requestHeaders: IncomingHttpHeaders = request.headers;

        console.log('BODY', requestBody);
        console.log('HEADERS', requestHeaders);
        return true;
    }
}

Если я установил multipart form, я получаю пустое тело. Почему это происходит? Похоже на ошибку.

PS

Однако возможно получить доступ к заголовкам, но тело по какой-то причине пусто ...

1 Ответ

1 голос
/ 18 июня 2020

Охранники активируются раньше, чем перехватчики. В этом случае данные multipart form обрабатываются FileInterceptor или FilesInterceptor (в зависимости от того, сколько файлов отправлено). Поскольку тело назначается в перехватчике (из-за того, что вызывается multer), это предполагаемая функциональность, поскольку тело не было проанализировано надлежащим промежуточным программным обеспечением. Вы можете выбрать номер multer() самостоятельно в своем main.ts, если хотите, в зависимости от типа входящего заголовка.

...