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.
Los controladores deben ser importados en un módulo para que sean reconocidos los endpoints.
// app.module.tsimport{Module}from'@nestjs/common';import{AppController}from'./app.controller';@Module({imports:[],controllers:[// Imports de ControladoresAppController],})exportclassAppModule{}
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.
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.
Recuerda con / (slashes) o sin ellos los controladores de NestJS resuelven la ruta.
@Get('nuevo')// 👈 Without slashes newEndpoint(){return'yo soy nuevo';}@Get('/ruta/')// 👈 With slashes hello(){return'con /sas/';}
Que gran practicidad esta característica.
Arquitectura de una aplicacion
Controllers
Las funciones de un controlador son:
Procesar la peticion HTTP
Obtener los datos de entrada desde las distinta fuentes (body, params, query)
Validar los datos de entrada
Llamar al servicio correspondiente
Responder con una petición HTTP con la información solicitada o con la información del error que se produjo
Services
Son el corazón de nuestra api. No solo se encarga de conectar el controlador con las librerías sino que además, llama a otros servicios.
La lógica de negocio se centra en esta parte
Libraries
Es la parte que se encarga de conectarse con las librerías externas. Librerias como bases de datos u otros apis.
Excelente aporte
todo me recuerda a Angular jaja
Si bastante
Angular pero en el backend :p
RESUMEN
Los controladores son los encargados de recibir los request de nuestra aplicación.
Estas request son las peticiones que llegan a nuestra aplicación desde un cliente web, móvil, etc, que vienen a través del protocolo HTTP.
Entre sus funciones están el de validar los request, que sus permisos y datos sean los correctos, y según el resultado de esa validación permitir su acceso a la capa de servicios para poder obtener los datos.
Al ser una petición que viaja a través del protocolo HTTP va a utilizar los verbos:
- GET : Obtener recursos
- PUT : Actualizar recursos
- POST : Crear recursos
- DELETE : Eliminar recursos
Los controladores se definen con una clase acompañada de un decorador, quien va a indicar cual será el comportamiento de dicho decorador.
Los decoradores a usar son:
@Controller()=>Define que la clase usada es un controlador
@Get('nuevo-endpoint')=>Crear un nuevo endpoint
Nota: Para correr la aplicación en modo de desarrollo:
npm run start:dev
Para declarar un nuevo endpoint en el Controlador usamos:
@Get('nuevo-endpoint')
newEndpoint() {
return 'I am new endpoint';
}
Si quieres conocer más a fondo cómo funciona el patrón Decorator o Decorador. Te dejo este vídeo en el que se explica su funcionamiento :D
Chicos si les sale este error de eslint Parsing error: Cannot read file '…/tsconfig.json'.eslint
Se soluciona agregando en el archivo de .eslintrc.js en parserOptions: tsconfigRootDir: __dirname,
muchas gracias
Pero esto es hermoso, es como si .NET y angular hubieran tenido un hijo
¿Como se le hace para poner eso? creo que es su cuenta de git en el vs code
Hay muchas extensiones, git log, git history, github for vscode... Prueba buscar en google comparativas y ver cuales funcionan mejor para tí. Yo utilizo Git Graph, Git History y Git Lens
¿Por qué a veces no actualiza los cambios con el comando npm run start:dev?
Hay que recargar la pagina
con los siguientes decoradores los set y get se crean solos sin necesidad de que estén implícitos como lo hace lombok con spring boot
Hace poco estudie sobre patrones de diseño, y al escuchar sobre estos decoradores, investigue si se trataba específicamente del patrón de diseño decorator y encontré lo siguiente.
The Decorator is a special syntax that provides us with a way to attach additional logic to classes, methods, accessors, parameters, and properties. They are used heavily in frameworks like Angular and NestJS
Fuente
Ojo que el concepto de "decorador" que se ve en patrones de diseño es sutilmente distinto al de decoradores en un lenguaje como python o en javascript.
un decorador a nest es lo que una anotación es a java
Hola, mi nombre es Antoine, feliz de estar aquí con ustedes.
npm run start:dev
los controladores manejan todos los request que llegan
**
CONTROLADORES
**
Los controladores son los componentes más importantes. Son los responsables de manejar las solicitudes entrantes y devolver las respuestas al cliente.
El mecanismo de enrutamiento gestiona qué controlador recibe qué solicitudes. cada controlador puede tener más de una ruta y cada ruta puede realizar diferentes trabajos.
Los enrutadores manejarán los métodos de nuestra RestAPI como GET , PUT , POST , DELETE , etc. solicitudes y respuestas salientes.
Excelente esta sintaxis! 👏
Entonces podemos resumir de esta clase que en los controladores se ubican los diferentes endpoints del mismo diferenciandolos por sus decoradores si son get, post, delete, etc?
Sí, los controladores en NestJS manejan los endpoints, y se diferencian por decoradores como @Get para distintas operaciones HTTP.
hola, una pregunta lo cambio como lo hace el profesor en el get del app controller y no me actualiza pór que sera?
Hola Camila, debes escribir este comando en la terminal
npm run start:dev
Este comando lee los archivos del proyecto y si hay un cambio el lo notifica y se actualiza solo