En NestJS, establecer encabezados de respuesta personalizados es útil para controlar el comportamiento del cliente o proporcionar información adicional en las respuestas HTTP. Esto se puede hacer utilizando el objeto Response
de Express o los decoradores de NestJS.
NestJS permite acceder al objeto Response
a través del decorador @Res()
.
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller('example')
export class ExampleController {
@Get()
setCustomHeader(@Res() res: Response): void {
res.set('X-Custom-Header', 'MiValorPersonalizado');
res.status(200).send('Encabezado personalizado establecido');
}
}
Nota: Cuando se usa @Res()
, debes enviar manualmente la respuesta con res.send()
o métodos similares.
NestJS proporciona el decorador @Header()
para establecer encabezados de manera más directa.
import { Controller, Get, Header } from '@nestjs/common';
@Controller('example')
export class ExampleController {
@Get('header')
@Header('X-Custom-Header', 'MiValorDirecto')
getWithHeader(): string {
return 'Encabezado añadido con @Header';
}
}
Si necesitas establecer múltiples encabezados junto con un código de estado, puedes combinarlos:
import { Controller, Get, Header, HttpCode } from '@nestjs/common';
@Controller('example')
export class ExampleController {
@Get('multiple-headers')
@Header('Content-Type', 'application/json')
@Header('X-Another-Header', 'OtroValor')
@HttpCode(201) // Cambia el código de estado
getWithMultipleHeaders(): object {
return { message: 'Encabezados personalizados y código de estado establecido' };
}
}
Si deseas aplicar encabezados a todas las respuestas, puedes usar un middleware.
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class HeadersMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction): void {
res.setHeader('X-Global-Header', 'ValorGlobal');
next();
}
}
Luego, registra el middleware en el módulo:
import { Module, MiddlewareConsumer } from '@nestjs/common';
import { ExampleController } from './example.controller';
import { HeadersMiddleware } from './headers.middleware';
@Module({
controllers: [ExampleController],
})
export class ExampleModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(HeadersMiddleware).forRoutes('*');
}
}
Content-Type
: Especifica el tipo de contenido (JSON, HTML, etc.).
Authorization
: Para tokens de autenticación.
Cache-Control
: Controla la caché.
X-Custom-Header
: Para encabezados personalizados.
Consulta la documentación de controladores en NestJS para más detalles sobre el manejo de encabezados.
Jorge García
Fullstack developer