Controladores en NestJS: Creación y Gestión de Endpoints HTTP

Clase 6 de 23Curso de Backend con NestJS

Resumen

El concepto más básico para desarrollar una aplicación con NestJS son los Controladores.

Qué son los controladores en NestJS

Los Controladores manejarán las rutas o endpoints que la aplicación necesite, además de validar los permisos del usuario, filtro y manipulación de datos.

Estructura de un controlador

La aplicación de NestJS creada por defecto con el CLI con el comando nest new <project-name> trae consigo un controlador básico con el nombre app.controller.ts. Verás que dicho archivo contiene una clase que a su vez posee un decorador llamado @Controller().

Dicho decorador le indica al compilador de NestJS que esta clase tendrá el comportamiento de un controlador.

// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {

  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

Los controladores deben ser importados en un módulo para que sean reconocidos los endpoints.

// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';

@Module({
  imports: [],
  controllers: [
    // Imports de Controladores
    AppController
  ],
})
export class AppModule {}

El controlador importa un servicio que son los responsables de la lógica y obtención de datos desde una BBDD que el controlador requiere.

// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

Puedes correr el servidor de NestJS con el comando npm run start:dev e ingresar a la ruta localhost:3000/ para visualizar el contenido que el controlador envía.

Si quieres crear una nueva ruta, basta con crear un método en la clase del controlador y colocarle el decorador @Get() con un nombre para el nuevo endpoint.

// app.controller.ts
@Controller()
export class AppController {

  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
  
  @Get('new-endpoint')
  newEndpoint(): string {
    return 'New endpoint';
  }
}

Ingresa a esta nueva ruta desde localhost:3000/new-endpoint para visualizar su respuesta y así crear los endpoints que necesites.


Contribución creada por: Kevin Fiorentino.