当前位置: 首页 > news >正文

【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.jsqmd.com/news/254966/

相关文章:

  • 超低功耗ARM处理器RK3566刷群晖DS-124包到底怎样?
  • 313. 超级丑数
  • AI平台Dataiku 支Windows系统安装过程总结
  • 智能监控 AI 分析终端开发实战:从搭建到部署完整教程
  • 教程 39 - 变换和父子关系 - 详解
  • 孩子近视不可逆!做好这3件事,让近视按下“暂停键”!
  • RS485通信实验
  • 学习记录260116
  • 拓展linux磁盘大小
  • adb调试
  • 04.配置请求过滤器,限制只有登录状态才能访问后端接口(jwt)
  • GitHub desktop 推送报错问题解决
  • 开源大模型微调对比:选对模型,让定制化更高效
  • 12.QWidget、QDialog、QMainWindow
  • Cobalt Strike横向渗透之Https Beacon实战1(跳板机Linux) - 教程
  • 【概率与期望相关】- 笔记
  • 编写一个Buildroot 驱动
  • 20260115紫题训练总结 - Link
  • JavaOOP
  • 《欲罢不能:刷屏时代如何摆脱行为上瘾》
  • 家用照片打印天花板!佳能 PIXMA iP3500 驱动让色彩还原度拉满
  • Redis 事务(MULTI/EXEC)与 Lua 脚本的核心区别 - 详解
  • 办公党狂喜!惠普 Deskjet F4180 一体机驱动稳定版,打印扫描复印全在线
  • 2026年嘉应学院寒假算法冬令营结训赛
  • STM32上进行卡尔曼滤波
  • 上海团队与华盛顿大学联手:AI实现医学图像精准识别突破
  • SEO救星上线!Google Search Console新功能手把手教你秒提收录
  • 多模一体破局:金仓数据库引领文档数据库国产化新征程
  • 微信立减金回收,2026年最聪明的省钱新姿势你真的知道吗 - 京顺回收
  • 跨平台虚拟机网络故障排查