You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js转发x-access-token至Nest.js API无响应问题求助

问题原因分析

核心问题出在Nest.js的登出接口代码中:当使用@Res()装饰器注入响应对象时,Nest.js会放弃自动处理响应的逻辑,必须手动调用响应方法来结束请求流程。

你的后端代码中注入了@Res(),但仅通过return返回数据,没有手动触发响应发送,导致请求一直处于挂起状态,前端自然收不到响应,表现为pending。

而注释Header转发后“恢复正常”,实际是因为此时JwtGuard验证失败,Nest.js的异常过滤器自动处理并发送了错误响应,请求得以正常结束。

解决方案

有两种修复方式:

方式1:移除@Res()装饰器(推荐)

如果无需手动控制响应对象,直接移除@Res(),让Nest.js自动处理响应序列化与发送:

@UseGuards(JwtGuard)
@Get('logout')
async logout(@UserDecorator() userId: string) {
  console.log('userId', userId)
  return { message: 'success' };
}

方式2:手动调用响应方法

若确实需要使用@Res()控制响应(比如设置自定义Header),必须手动调用res.json()或res.send()结束请求:

@UseGuards(JwtGuard)
@Get('logout')
async logout(@UserDecorator() userId: string, @Res() res) {
  console.log('userId', userId)
  res.status(200).json({ message: 'success' });
}
额外验证点
  • 确认req.headers['x-access-token']格式正确:前端传入的Bearer ${token}格式无需修改,直接转发即可,你的代码这部分逻辑没问题。
  • HTTP Header大小写不敏感,Node.js会自动将Header名转为小写,因此req.headers['x-access-token']的写法是正确的。

内容的提问来源于stack exchange,提问作者dokichan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:37:49