nestjs响应头header入门到精通

 更新时间:2026年01月14日 10:56:31   作者:书签篮  
本文主要介绍了nestjs响应头header入门到精通,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、@Header()基础用法

作用:设置 HTTP 响应头(Response Headers),常用于指定内容类型、缓存策略或自定义头信息。

1. 静态头部设置

import { Controller, Get, Header } from '@nestjs/common';

@Controller('example')
export class ExampleController {
  @Get('static')
  @Header('Content-Type', 'application/json')
  @Header('Cache-Control', 'no-cache')
  getStatic() {
    return { message: 'Static headers' };
  }
}

响应头

Content-Type: application/json
Cache-Control: no-cache

2. 动态头部值

通过工厂函数动态生成头部值:

@Get('dynamic')
@Header('X-Request-Time', (req) => Date.now().toString())
getDynamic() {
  return { message: 'Dynamic headers' };
}

二、进阶技巧与注意事项

1. 与@Res()对象结合

若需手动操作响应对象(如文件下载),需显式注入 @Res()

import { Response } from 'express';

@Get('manual')
getManual(@Res() res: Response) {
  res.set('X-Custom-Header', 'value');
  res.send({ data: 'Manual headers' });
}

注意:使用 @Res() 后,NestJS 的自动响应管理会失效,需手动处理响应。

2. 装饰器执行顺序

多个装饰器的执行顺序影响最终结果:

@Get('order')
@Header('A', '1')
@Header('B', '2')
getOrder() {
  return {};
}

响应头

A: 1
B: 2

3. 覆盖默认行为

NestJS 默认设置 Content-Type: application/json,可通过 @Header() 覆盖:

@Get('override')
@Header('Content-Type', 'text/plain')
getOverride() {
  return 'Plain text response';
}

三、底层原理与框架差异

1. 底层适配机制

  • Express:直接调用 response.setHeader()。
  • Fastify:通过 reply.header() 设置,需注意 Fastify 的头名称大小写不敏感。

2. 与中间件的交互

全局中间件设置的头部可能被控制器中的 @Header() 覆盖,需注意优先级。

四、常见问题与解决方案

1. 头部未生效

  • 原因:使用了 @Res() 但未正确操作响应对象。
  • 解决:确保在手动操作响应时调用 res.send() 或 res.end()。

2. 动态值依赖服务

通过依赖注入获取服务数据:

@Get('service-data')
@Header('X-Version', (req, res, next) => {
  const appVersion = req.app.get('APP_VERSION');
  return appVersion;
})
getServiceData() {
  return { version: '1.0.0' };
}

五、最佳实践

1. 统一头部管理

使用拦截器全局设置公共头部:

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';

@Injectable()
export class HeadersInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler) {
    const response = context.switchToHttp().getResponse();
    response.setHeader('X-Powered-By', 'NestJS');
    return next.handle();
  }
}

2. 安全头部配置

推荐设置安全相关头部:

@Get('secure')
@Header('Content-Security-Policy', "default-src 'self'")
@Header('X-Content-Type-Options', 'nosniff')
getSecure() {
  return { data: 'Secure headers' };
}

六、性能优化建议

  • 避免重复设置:在拦截器中设置公共头部,减少控制器冗余代码。
  • 条件性头部:根据请求参数动态决定是否设置头部:
@Get('conditional')
@Header('X-Conditional', (req) => req.query.debug ? 'true' : 'false')
getConditional() {
  return { debugMode: !!req.query.debug };
}

通过合理使用 @Header() 装饰器,您可以精确控制 API 的响应行为,同时保持代码的可维护性。建议结合拦截器和全局中间件实现复杂的头部管理逻辑。

到此这篇关于nestjs响应头header入门到精通的文章就介绍到这了,更多相关nestjs响应头header内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 深入理解JavaScript作用域和作用域链

    深入理解JavaScript作用域和作用域链

    今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript
    2011-10-10
  • JavaScript 使用 splice 方法删除数组元素可能导致的问题分析

    JavaScript 使用 splice 方法删除数组元素可能导致的问题分析

    这篇文章主要介绍了JavaScript 使用 splice 方法删除数组元素可能导致的问题分析,当在 JavaScript 中从数组中删除元素时,使用 splice 方法时需要谨慎,本文给大家详细讲解,需要的朋友可以参考下
    2023-04-04
  • 关于ExtJS4.1:快捷键支持的问题

    关于ExtJS4.1:快捷键支持的问题

    本篇文章小编为大家介绍,关于ExtJS4.1 快捷键支持的问题。需要的朋友参考下
    2013-04-04
  • js获取腾讯视频ID的方法

    js获取腾讯视频ID的方法

    这篇文章主要介绍了js获取腾讯视频ID的方法,涉及JavaScript针对URL地址规则的分析与字符串的截取操作相关操作技巧,需要的朋友可以参考下
    2016-10-10
  • 基于Require.js使用方法(总结)

    基于Require.js使用方法(总结)

    下面小编就为大家带来一篇基于Require.js使用方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • js确定对象类型方法

    js确定对象类型方法

    再读《JavaScript权威指南》(犀牛书)9.7确定对象类型 之摘录
    2012-03-03
  • Bootstrap每天必学之缩略图与警示窗

    Bootstrap每天必学之缩略图与警示窗

    Bootstrap每天必学之缩略图与警示窗,对Bootstrap缩略图与警示窗小编也了解的很少,希望通过这篇文章和大家更多的去学习Bootstrap缩略图与警示窗,从中得到收获。
    2015-11-11
  • JS实现的五级联动菜单效果完整实例

    JS实现的五级联动菜单效果完整实例

    这篇文章主要介绍了JS实现的五级联动菜单效果,结合完整实例形式分析了js多级联动菜单的完整实现步骤,涉及JS数组遍历、扩展及元素节点操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • 每天一篇javascript学习小结(Date对象)

    每天一篇javascript学习小结(Date对象)

    这篇文章主要介绍了javascript中的Date对象知识点,对Date对象的基本使用方法,以及各种方法进行整理,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • JS自定义混合Mixin函数示例

    JS自定义混合Mixin函数示例

    这篇文章主要介绍了JS自定义混合Mixin函数,涉及javascript面向对象程序设计中函数与属性操作相关技巧,需要的朋友可以参考下
    2016-11-11

最新评论