Volver a la página principal
viernes 3 enero 2025
7

Cómo Establecer Encabezados de Respuesta en NestJS

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.

Métodos para Establecer Encabezados de Respuesta

1. Utilizando el Objeto Response de Express

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.

2. Usando Decoradores de NestJS

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';
  }
}

3. Establecer Múltiples Encabezados con @HttpCode y @Headers

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' };
  }
}

4. Middleware para Encabezados Globales

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('*');
  }
}

Ejemplos de Encabezados Comunes

  • 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.

Referencia Oficial

Consulta la documentación de controladores en NestJS para más detalles sobre el manejo de encabezados.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer