为无Payload的NestJS方法添加@AsyncApiSub注解报错,如何生成API文档?
解决nestjs-asyncapi无请求体端点的注解报错问题
问题原因
你遇到的TypeError: Cannot destructure property 'prototype' of 'type' as it is null错误,是因为当你给@AsyncApiSub的message.payload设置null时,内部依赖的@nestjs/swagger Schema工厂会尝试解析这个null作为类型,但它期望接收一个带prototype的类构造函数,而非null,因此抛出异常。
解决方案
以下几种方法可以解决这个问题:
1. 省略payload字段(推荐)
直接不指定message.payload,或者保留message为空对象,AsyncAPI会自动识别该端点无请求体:
@SubscribeMessage(ActivityActions.GENERATE_DEMO_ACTIVITY) @AsyncApiSub({ channel: ActivityActions.GENERATE_DEMO_ACTIVITY, message: {} }) public async generateDemoActivity(@ConnectedSocket() socket: ClientSocket): Promise<Activity[]> { return this.activityService.generateDemoActivity(socket.userId); }
2. 使用空DTO类
创建一个空的DTO类作为payload值,让Schema工厂可以正常解析:
// 定义空DTO export class EmptyPayloadDto {} // 在网关方法中使用 @SubscribeMessage(ActivityActions.GENERATE_DEMO_ACTIVITY) @AsyncApiSub({ channel: ActivityActions.GENERATE_DEMO_ACTIVITY, message: { payload: EmptyPayloadDto } }) public async generateDemoActivity(@ConnectedSocket() socket: ClientSocket): Promise<Activity[]> { return this.activityService.generateDemoActivity(socket.userId); }
3. 升级nestjs-asyncapi版本
部分旧版本的nestjs-asyncapi对无payload场景的处理存在bug,升级到最新稳定版可能已经修复了该问题:
npm install nestjs-asyncapi@latest
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

