如何在NestJS框架中获取HTTP请求头信息?
NestJS 获取请求头的实现方案
你可以通过以下两种常用方式实现请求头的读取,用法和Express原生逻辑完全兼容:
- 方法1:使用
@Req()装饰器获取完整请求对象
该方式适合需要同时操作请求其他属性的场景,和你之前在Express中使用req.headers的习惯完全一致,示例代码如下:
import { Controller, Get, Header, Req } from "@nestjs/common"; import { Request } from "express"; @Controller("health") export class HealthController { @Get() @Header("content-type", "application/json") @Header("Something", "Value") // 你需要返回的自定义响应头 checkHealth(@Req() req: Request): unknown { // 和Express用法完全一致获取所有请求头 const allHeaders = req.headers; // 获取单个指定请求头 const specificHeader = req.headers['something']; return { test: "This is the test", receivedHeaders: allHeaders }; } }
- 方法2:使用
@Headers()装饰器直接读取请求头
该方式是NestJS提供的声明式语法,更简洁,不需要引入完整的请求对象,既可以一次性读取所有请求头,也可以直接读取单个指定请求头,示例代码如下:
import { Controller, Get, Header, Headers } from "@nestjs/common"; @Controller("health") export class HealthController { @Get() @Header("content-type", "application/json") @Header("Something", "Value") // 方式1:直接获取全部请求头对象 checkHealth(@Headers() headers: Record<string, string | string[]>): unknown { const specificHeader = headers['something']; return { test: "This is the test", specificHeader }; } // 方式2:直接获取指定名称的单个请求头 @Get('test') test(@Headers('something') somethingHeader: string) { return { somethingHeader } } }
注意:Node.js 会自动将传入的请求头名称转为小写格式存储,因此读取时使用小写的键名取值更稳妥,不会出现大小写不匹配导致取不到值的问题。
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

