Nestjs Swagger UnhandledPromiseRejectionWarning:TypeError:无法解构“未定义”或“空”的属性“原型”

Posted

技术标签:

【中文标题】Nestjs Swagger UnhandledPromiseRejectionWarning:TypeError:无法解构“未定义”或“空”的属性“原型”【英文标题】:Nestjs Swagger UnhandledPromiseRejectionWarning: TypeError: Cannot destructure property `prototype` of 'undefined' or 'null' 【发布时间】:2019-05-14 11:23:48 【问题描述】:

我正在开发一个 Nestjs REST API 项目,我必须在其中添加招摇。我以这个 repo 为例:https://github.com/nestjs/nest/tree/master/sample/11-swagger

但我收到此错误: UnhandledPromiseRejectionWarning: TypeError: Cannot destructure property 'prototype' of 'undefined' or 'null' 和这个: UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block or by rejecting a promise which was not handled with .catch(). 项目在这里:https://github.com/strdr4605/nestjs-rest-api/blob/swagger/src/main.ts

【问题讨论】:

我在示例项目中使用了您的 main.ts 文件,它工作正常。问题一定出在其他地方,也许是您的控制器之一?还可以尝试重新安装和更新您的依赖项,永远不会受到伤害。 @KimKern,是的,我在控制器/服务中犯了一个错误。不确定,但可能是因为我在控制器和服务的 PUT/DELETE 方法中使用 ObjectID 作为 id 类型。改为字符串类型。 很高兴听到它现在正在工作。 :-) 考虑删除您的问题或添加一个答案(标记为已解决),描述您为解决问题所做的工作。此外,在您的帖子中包含代码的相关部分总是好的,而不是只是链接到它。链接将来可能会停止工作。 我有类似的东西,使用 Express 的请求和响应,我在尝试使用 NestJs Swagger 模块响应未定义时使用如下装饰器:方法(@Res() res: Response)。 【参考方案1】:

swagger 的配置没问题。不确定,但可能是因为我在控制器和服务的 PUT/DELETE 方法中使用 ObjectID 作为 id 类型。更改为字符串类型,一切正常。

【讨论】:

【参考方案2】:

我在 Swagger 尝试在事件控制器中解析 Kafka 消息的负载时遇到问题,因此我添加了 ApiExcludeEndpoint 以排除消息处理程序

@ApiExcludeEndpoint()
@EventPattern('topic', Transport.KAFKA)
public async handleEvent(@Payload() message: EventDto): Promise<void> 
// ...

【讨论】:

以上是关于Nestjs Swagger UnhandledPromiseRejectionWarning:TypeError:无法解构“未定义”或“空”的属性“原型”的主要内容,如果未能解决你的问题,请参考以下文章

@nestjs/swagger 没有设置授权标头

@nestjs/swagger:如何添加 API URL?

NRWL + NestJS 尝试使用 Swagger 插件

“nestjs/swagger”中的哪个函数将 DTO 转换为 Swagger 模型定义?

NestJs/swagger:定义没有 DTO 类的引用模式

如何在nestjs中禁用swagger进行生产