typescript - Nestjs 守卫中的空请求主体(错误?)
问题描述
@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
我得到空的身体。为什么会这样?看起来像一个错误。
附言
然而,可以访问标题但由于某种原因正文为空......
解决方案
警卫在拦截器之前被激活。在这种情况下,multipart form
数据由FileInterceptor
or处理FilesInterceptor
(取决于发送的文件数量)。因为主体是在拦截器中分配的(由于何时multer
被调用),所以这是预期的功能,因为主体没有被适当的中间件解析。如果您愿意,您可以决定自己调用multer()
,main.ts
具体取决于传入的标头类型。
推荐阅读
- javascript - Ember.js ajax POST请求不通过海市蜃楼
- python - 如何在 Python 中绘制多级分组直方图?
- r - R-markdow 中 KableExtra 的额外对齐错误
- excel - 使用 VBA 将 Outlook 用户定义字段导入 Excel
- ios - iOS 13 中 UISearchBar 的取消按钮的 Xamarin 问题
- javascript - 为什么 removeChild 不删除元素?
- java - 在 MLCP MarkLogic 上执行导出操作后,如何指定布局或格式元数据的 xml
- python - Python 文档中有关 Python 虚拟环境的问题
- angular - 将父 ng-template 数据传递给子 ng-template
- sharepoint - 在 SharePoint Online 中签入另一个用户的文件