如何正确使用 Nest.js 的 @Headers?

Posted

技术标签:

【中文标题】如何正确使用 Nest.js 的 @Headers?【英文标题】:How to use Nest.js's @Headers properly? 【发布时间】:2019-06-02 13:13:00 【问题描述】:

根据controller docs,我可以使用@Headers(param?: string)req.headersreq.headers[param] 来获取标头值。我尝试了第一种方法,我在 Postman 的请求标头中遵循了以下内容

Content-Type:application/json
My-Id:test12345

我有以下控制器示例代码

@Put('/aa/:aa/bb/:bb/')
@UsePipes(new ValidationPipe( transform: true ))
public async DoMyJob(@Body() request: MyRequestDto,
                                @Param('aa') aa: number,
                                @Param('bb') bb: string,
                                @Headers('My-Id') id: string): Promise<MyResponseDto> 
    // More code here

当我设置断点来检查来自My-Id 标头的值时,它是未定义的。

那么我应该如何在 Nest.Js 中正确地从 RESTful 服务客户端获取标头值?

【问题讨论】:

【参考方案1】:

标题将以小写形式发送,因此您需要 @Headers('my-id')


通过注入完整的 headers 对象易于调试:

import  Headers  from '@nestjs/common';
...
@Put('/')
public async put(@Headers() headers) 
    console.log(headers);

headers 变量将引用req.headers

【讨论】:

以上是关于如何正确使用 Nest.js 的 @Headers?的主要内容,如果未能解决你的问题,请参考以下文章

RoleGuard 如何在 Nest JS 中工作?智威汤逊

Nest.js 与 AWS Cognito,如何访问用户属性

无论如何在 Nest.js 中使用 Fastify 获取请求、响应的类型接口

如何在 Nest.js 中提供静态 HTML 文件?

如何在 Nest.JS 中使用多个 Secret 实现多个 JWT 策略

如何在没有守卫装饰器的情况下始终验证 JWT? (Nest.js + 护照)