nestjs響應頭header入門到精通
一、@Header()基礎用法
作用:設置 HTTP 響應頭(Response Headers),常用于指定內(nèi)容類型、緩存策略或自定義頭信息。
1. 靜態(tài)頭部設置
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. 動態(tài)頭部值
通過工廠函數(shù)動態(tài)生成頭部值:
@Get('dynamic')
@Header('X-Request-Time', (req) => Date.now().toString())
getDynamic() {
return { message: 'Dynamic headers' };
}
二、進階技巧與注意事項
1. 與@Res()對象結(jié)合
若需手動操作響應對象(如文件下載),需顯式注入 @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. 裝飾器執(zhí)行順序
多個裝飾器的執(zhí)行順序影響最終結(jié)果:
@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:直接調(diào)用 response.setHeader()。
- Fastify:通過 reply.header() 設置,需注意 Fastify 的頭名稱大小寫不敏感。
2. 與中間件的交互
全局中間件設置的頭部可能被控制器中的 @Header() 覆蓋,需注意優(yōu)先級。
四、常見問題與解決方案
1. 頭部未生效
- 原因:使用了 @Res() 但未正確操作響應對象。
- 解決:確保在手動操作響應時調(diào)用 res.send() 或 res.end()。
2. 動態(tài)值依賴服務
通過依賴注入獲取服務數(shù)據(jù):
@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. 統(tǒng)一頭部管理
使用攔截器全局設置公共頭部:
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' };
}
六、性能優(yōu)化建議
- 避免重復設置:在攔截器中設置公共頭部,減少控制器冗余代碼。
- 條件性頭部:根據(jù)請求參數(shù)動態(tài)決定是否設置頭部:
@Get('conditional')
@Header('X-Conditional', (req) => req.query.debug ? 'true' : 'false')
getConditional() {
return { debugMode: !!req.query.debug };
}
通過合理使用 @Header() 裝飾器,您可以精確控制 API 的響應行為,同時保持代碼的可維護性。建議結(jié)合攔截器和全局中間件實現(xiàn)復雜的頭部管理邏輯。
到此這篇關于nestjs響應頭header入門到精通的文章就介紹到這了,更多相關nestjs響應頭header內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript 使用 splice 方法刪除數(shù)組元素可能導致的問題分析
這篇文章主要介紹了JavaScript 使用 splice 方法刪除數(shù)組元素可能導致的問題分析,當在 JavaScript 中從數(shù)組中刪除元素時,使用 splice 方法時需要謹慎,本文給大家詳細講解,需要的朋友可以參考下2023-04-04
每天一篇javascript學習小結(jié)(Date對象)
這篇文章主要介紹了javascript中的Date對象知識點,對Date對象的基本使用方法,以及各種方法進行整理,感興趣的小伙伴們可以參考一下2015-11-11

