【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,客户端将永远等不到响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1170277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

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的启动、…

智能监控 AI 分析终端开发实战:从搭建到部署完整教程

智能监控 AI 分析终端是 “摄像头 + 边缘 AI 网关 + 本地推理 + 报警输出” 的一体化设备,核心能力是**实时分析视频流**(如人脸检测、异常行为识别、物体计数),无需依赖云端,就能实现低延迟、高隐私的监控预警。…

教程 39 - 变换和父子关系 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

孩子近视不可逆!做好这3件事,让近视按下“暂停键”!

医学研究明确表明,儿童近视一旦发生便不可逆,一旦发展为高度近视,还可能引发视网膜脱离、黄斑病变等多种眼部并发症,给孩子的未来生活和职业选择带来诸多限制。因此,在儿童成长发育阶段,做好近视防控工作&a…

RS485通信实验

RS485通信实验 1、USB_A转RS485 <——> RS485转TTL模块 <——> TTL转USB_A2、

拓展linux磁盘大小

拓展linux磁盘大小 如果是虚拟机,先在设置的中增大磁盘大小 第 1步、看分区号(现在是 sda1): lsblk第 2 步:执行扩展分区 sudo growpart /dev/sda 1若是没有下载growpart 安装 growpart(cloud-guest-utils) sud…

04.配置请求过滤器,限制只有登录状态才能访问后端接口(jwt)

1.首先前端需要配置请求拦截器 目的:保证登录了的用户发起的每一次请求都会携带token,而不用每次都自己添加,在request.js里面添加// 添加请求拦截器 service.interceptors.request.use(config => {// 1. 从 ses…

GitHub desktop 推送报错问题解决

报错描述如果使用SSH认证&#xff0c;在GitHub desktop推送的时候会出现如下报错&#xff1a;Authentication failed. Some common reasons include: - You are not logged in to your account: see File > Options. - You may need to log out and log back in to refresh …

开源大模型微调对比:选对模型,让定制化更高效

引言:微调选型决定定制化效果 随着开源大模型生态的蓬勃发展,越来越多的个人开发者和中小企业开始投身模型定制化的浪潮。而微调作为将通用大模型改造为场景化模型的核心手段,其最终效果不仅取决于数据质量和训练参…

12.QWidget、QDialog、QMainWindow

初学者学QT的拦路虎&#xff0c;我认为有这么几个&#xff1a; 1.环境搭建 2.调试方法 3.C语言本身 4.QWidget、QDialog、QMainWindow 环境搭建&#xff0c;前面写过vsstudio和qt creator的搭建方法。 C也用一个专栏去叙述。 本文记录下QWidget、QDialog、QMainWindow。 …

Cobalt Strike横向渗透之Https Beacon实战1(跳板机Linux) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

【概率与期望相关】- 笔记

OI 中的概率与期望相关 在 OI 中,我们常讨论离散随机变量。1. 概率的定义 虽然我们都知道概率是 \(0\) 到 \(1\) 之间的一个数,但在解题时,更推荐大家从集合的角度去理解。 设样本空间为 \(\Omega\)(所有可能发生的…

编写一个Buildroot 驱动

编写一个Buildroot 驱动模块 由于Buildroot 不支持ssh 故采用adb调试 adb连接 列出设备 adb devices连接设备 adb shell驱动模块编译(交叉编译) 驱动模块源码 #include <linux/module.h> /* 模块相关宏和函数…

20260115紫题训练总结 - Link

A - 荣誉称号 场上想到了转换成完全二叉树,但没有发现大量点同余这一性质…… 题解 B - training 训练路径 经过转换,问题变成求没有偶欢的最大生成仙人掌,必须包含原树边,有因为每个点再原树上只有 \(10\) 个边,…

JavaOOP

JavaOOPJava面向对象2026.01.15 我好想哭吧我昨天写的没保存 算了不管了反正也没看多少( 回顾方法以及加深不多说吧,记一下重点的东西好了 break和return的区别: break:跳出switch,结束循环 return:结束方法,返…

《欲罢不能:刷屏时代如何摆脱行为上瘾》

《欲罢不能》不只是讲网瘾&#xff0c;而是把它归到“行为上瘾”这个大概念里说。核心就是&#xff0c;我们刷手机、打游戏停不下来&#xff0c;不是意志力差&#xff0c;是背后有顶尖设计师&#xff0c;盯着人类心理弱点设计了上瘾套路。 书里说行为上瘾和吸毒、喝酒的生…

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

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

Redis 事务(MULTI/EXEC)与 Lua 脚本的核心区别 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …