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

如何在NestJS响应中设置请求头字段?遇res.headers.set未定义错误

解决NestJS登录接口设置响应头报错的问题

这个TypeError: Cannot read property 'set' of undefined错误,本质是你对NestJS中响应对象的API用法理解有误,咱们直接来修正:

正确的实现代码

你需要调整两处细节:一是用Express响应对象的标准方法设置响应头,二是如果想保留Nest自动处理返回值(比如序列化)的能力,要给@Res()加上passthrough: true选项。修改后的代码如下:

@Post('login')
async login(
  @Body() body: AuthDto,
  @Res({ passthrough: true }) res: Response
) {
  const loginResponse = await this.authService.login(body);
  console.log('loginResponse', loginResponse);
  // 使用Express响应对象的set()方法设置响应头
  res.set('x-access-token', loginResponse.access_token);
  return loginResponse;
}

为什么之前的代码会报错?

你之前尝试用res.headers.set(),这里存在两个关键误区:

  • 在Express的响应对象中,根本没有res.headers.set()这个API,设置响应头的正确方式是res.set()或者res.header()(这两个方法功能完全等价)。
  • 另外,res.headers其实是请求对象(req)的属性,用来读取前端发送的请求头信息,而非设置响应头的入口,所以你访问res.headers会得到undefined,调用set()自然就抛出了错误。

可选替代方案(无需直接操作响应对象)

如果不想手动处理响应对象,也可以通过NestJS的拦截器来统一处理响应头,但对于单个接口的动态头设置,上面的方法会更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:33:15