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
相关产品推荐
相关产品推荐

