You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为无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é

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:20:13