Volver a la página principal
domingo 21 julio 2024
40

Cómo leer headers en NestJS

Paso 1: Crear un controlador

Primero, necesitas un controlador en tu aplicación NestJS. Este se encargará de gestionar las solicitudes entrantes.

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

@Controller('example')
export class ExampleController {
  @Get()
  getHeaders(@Headers() headers: any): string {
    return `Headers: ${JSON.stringify(headers)}`;
  }
}

En este ejemplo, estamos utilizando el decorador @Headers() para inyectar todos los headers de la solicitud en nuestro método getHeaders.

Paso 2: Acceder a un header específico

Si necesitas acceder a un header específico, puedes hacerlo de la siguiente manera:

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

@Controller('example')
export class ExampleController {
  @Get('specific-header')
  getSpecificHeader(@Headers('user-agent') userAgent: string): string {
    return `User-Agent: ${userAgent}`;
  }
}

Aquí, el decorador @Headers('user-agent') extrae específicamente el valor del header User-Agent.

Paso 3: Usar pipes para validación y transformación

NestJS permite usar pipes para validar y transformar los headers antes de procesarlos. Por ejemplo, puedes crear un pipe personalizado para verificar que un header específico esté presente.

import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException } from '@nestjs/common';

@Injectable()
export class HeaderValidationPipe implements PipeTransform {
  transform(value: any, metadata: ArgumentMetadata) {
    if (!value['custom-header']) {
      throw new BadRequestException('custom-header is required');
    }
    return value;
  }
}

Luego, aplicas este pipe en tu controlador:

import { Controller, Get, Headers, UsePipes } from '@nestjs/common';
import { HeaderValidationPipe } from './header-validation.pipe';

@Controller('example')
export class ExampleController {
  @Get('validate-header')
  @UsePipes(new HeaderValidationPipe())
  validateHeader(@Headers() headers: any): string {
    return `Custom-Header: ${headers['custom-header']}`;
  }
}
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer