news 2026/1/16 22:58:36

【NestJS】为什么return不返回客户端?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【NestJS】为什么return不返回客户端?

在 NestJS 中,当你使用了@Res()(或@Response())装饰器时,NestJS 会进入**“库原生模式”(Library-specific mode)**。

原因分析

一旦你在路由处理函数中注入了@Res(),NestJS 就失去了对响应流的自动控制权。此时,NestJS 不再理会函数的return,它会认为你将手动处理响应(例如通过调用res.send()res.json())。

在你提供的代码中:

  1. 你使用了@Res() res: Response
  2. 你写了return ret;
  3. 由于 NestJS 在等待你手动调用res的方法来结束请求,而你一直没调用,请求就会一直挂起(Pending),直到浏览器或服务器超时。

解决方案

你有三种方式可以解决这个问题:

方案一:手动调用res.send()res.json()(推荐用于需要精细控制响应的情况)

既然你已经引入了res对象,就直接使用它来发送数据:

@Get('confirm-email')asyncconfirmEmail(@Query('code')code:string,@Res()res:Response){letret={code:RETCODE.EMAIL_CONFIRMATION_FAILED,access_token:null,message:'Error 9004',};constuserCode=awaitthis.loginService.getCode(code,1);if(!userCode){console.log('User code not found');returnres.status(200).json(ret);// 使用 res.json() 发送响应}// 注意:其他逻辑路径也必须通过 res 发送响应}
方案二:使用passthrough: true(最推荐:既想用 res 又想用 return)

如果你只想用res来设置一些东西(比如 Cookie、Header),但仍然希望由 NestJS 来处理return的返回值,可以设置passthrough参数:

@Get('confirm-email')asyncconfirmEmail(@Query('code')code:string,@Res({passthrough:true})res:Response){letret={code:RETCODE.EMAIL_CONFIRMATION_FAILED,access_token:null,message:'Error 9004',};constuserCode=awaitthis.loginService.getCode(code,1);if(!userCode){returnret;// 此时 return 生效了,NestJS 会自动包装成 JSON 发送}}
方案三:移除@Res()(最简洁)

如果你在函数体里根本没用到res对象(比如只是为了定义类型却没调用它的方法),直接删掉它。这是 NestJS 的推荐做法,它会自动处理return的对象。

@Get('confirm-email')asyncconfirmEmail(@Query('code')code:string){// 移除 @Resletret={code:RETCODE.EMAIL_CONFIRMATION_FAILED,access_token:null,message:'Error 9004',};constuserCode=awaitthis.loginService.getCode(code,1);if(!userCode){returnret;// 正常工作}}

总结

在 NestJS 中,一旦用了@Res(),你就得对响应负责。如果不调用res.send()或设置passthrough: true,客户端将永远等不到响应。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/16 22:56:14

AI平台Dataiku 支Windows系统安装过程总结

目录〇、浅语一、理想情况下的安装过程1.1 安装启动器1.2 启动启动器二、安装问题处理过程记录2.1 Java17问题2.2 在可访问外网的机器上下载 DSS 离线包2.3 安装python3.112.4 离线安装Dataiku DSS2.5 离线安装Dataiku DSS,指定python路径版三、Dataiku DSS的启动、…

作者头像 李华
网站建设 2026/1/16 22:55:27

超低功耗ARM处理器RK3566刷群晖DS-124包到底怎样?

最近小白心心念念的RK3566机器已经到手,本来是想着刷成ArmbianOS,然后玩一玩命令行的。但是鬼使神差的就把它刷成了黑裙……说实在的,感觉在功能上群晖NAS要更加全面一些,毕竟也算是领军牌子了。这个帖子应该不算是体验帖&#xf…

作者头像 李华
网站建设 2026/1/16 22:46:36

家用照片打印天花板!佳能 PIXMA iP3500 驱动让色彩还原度拉满

作为摄影爱好者,平时喜欢把拍的照片打印出来做成相册,但家用打印机总达不到预期 —— 要么色彩偏暗,要么细节模糊,直到我找到适配佳能 PIXMA iP3500 的专属驱动(https://www.qudongwu.com/xiazai_9543.html&#xff09…

作者头像 李华
网站建设 2026/1/16 22:43:31

跨平台虚拟机网络故障排查

引言跨平台虚拟机网络架构的常见应用场景网络故障对业务连续性的影响排查工具与方法概述常见网络故障类型虚拟机与宿主机通信失败跨虚拟机间通信问题外部网络访问异常DHCP/DNS配置错误防火墙或安全策略阻断基础排查步骤检查虚拟机网络适配器配置(NAT/桥接/仅主机模式…

作者头像 李华
网站建设 2026/1/16 22:34:12

哈佛大学首创AI模型:让机器像人类一样记住看不见的物体运动

这项由哈佛大学Kempner研究所、加州大学圣地亚哥分校和卡内基梅隆大学共同完成的研究发表于2025年,有兴趣深入了解的读者可以通过论文编号arXiv:2601.01075v1查询完整论文。在我们的日常生活中,有一个看似简单却极其复杂的现象:当你转过身去&…

作者头像 李华
网站建设 2026/1/16 22:34:02

为什么设备信息电子化不等于数字化

在工业数字化转型过程中,很多企业管理者常会遇到一个问题:明明投入了几十万甚至上百万,上线了ERP、EAM这些高大上的系统,但一走到车间一线,设备管理依然在靠纸笔记录,处于最原始的状态。其实,这…

作者头像 李华