javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > nestjs响应头header

nestjs响应头header入门到精通

作者:书签篮

本文主要介绍了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. 底层适配机制

2. 与中间件的交互

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

四、常见问题与解决方案

1. 头部未生效

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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文