news 2026/4/18 11:03:50

【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/4/11 9:03:03

day135—快慢指针—环形链表Ⅱ(LeetCode-142)

题目描述给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…

作者头像 李华
网站建设 2026/4/17 19:18:29

开源大模型中的Agent概念解析

你好!这个问题问得非常好,因为“Agent”确实是当前AI领域,尤其是大模型应用中最热门、最关键的概念之一。 简单来说,在大模型语境下的“Agent”(智能体),指的是一种能够理解用户指令、自主规划并…

作者头像 李华
网站建设 2026/4/18 5:35:08

LuatOS-Air脚本移植到LuatOS版本注意事项

一、lua版本不一样 LuatOS-Air使用的是lua5.1版本,本身不支持位移运算符。 LuatOS使用的是lua5.3版本,取消了module(..., package.seeall)这种形式的跨文件调用。 二、api不同 首先说明,core和脚本有所不同,用户可以理解为&am…

作者头像 李华
网站建设 2026/4/18 6:59:52

边缘智算新引擎 DPU 驱动的算力革新

2026年1月7日,工信部印发《工业互联网和人工智能融合赋能行动方案》,强化工业智能算力供给。加快工业互联网与通算中心、智算中心、超算中心融合应用,鼓励公共算力服务商向工业企业提供服务。引导工业企业加快边缘一体机、智能网关等设备部署…

作者头像 李华