Para crear controladores puedes usar el generador de código de NestJS con el siguiente comando:
nest g co controllers/categories --flat
Introducción a NestJS
Fundamentos de NestJS para Aplicaciones Escalables
Instalación y Configuración de NestJS en VS Code
Configuración Inicial de Proyectos Nest JS: Archivos y Estructura Básica
Desarrollo de API RESTful para eCommerce con Platz Store
Repaso de TypeScript para trabajar con NestJS
REST API
Controladores en NestJS: Creación y Gestión de Endpoints HTTP
Parámetros en Endpoints REST API con Nest.js
Uso de Parámetros Query en Endpoints de APIs
Principio de Responsabilidad Única en NestJS: Creación de Controladores
Uso de Insomnia para Pruebas de API en Platzi Store
Implementación del Método POST en Controladores HTTP
Implementación de Métodos HTTP PUT y DELETE en Código
Códigos de Estado HTTP: Uso y Personalización en NestJS
Integridad de datos
Creación y Gestión de Servicios en NestJS
Inyección de Dependencias en Controladores con TypeScript
Manejo de Errores en NestJS: Excepciones y Respuestas Adecuadas
Transformación y Validación de Datos con Pipes en NestJS
Creación de Pipes Personalizados en NestJS para Validación de Datos
Implementación de DTOs para Tipado y Validación en APIs de Productos
Validación de Tipos en APIs con Class Validator y DTOs
Validación de Datos con Validation Pipe en Node.js
Próximos pasos
Creación de Controladores y Servicios en NestJS
Programación Modular con NestJS: Mejora Arquitectura y Deployment
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
NestJS le da mucha importancia a los Principios SOLID en el desarrollo de software para mantener las buenas prácticas de codificación. Una de ellas es la responsabilidad única.
La S de SOLID hace referencia a “Single Responsibility” y recomienda que cada pieza de software debe tener una única función. Por ejemplo, un controlador de productos no debería encargarse de categorías o de usuarios. Se debe crear un controlador para cada entidad que la aplicación necesite.
Lo mismo ocurre con los métodos. Un método para la obtención de datos solo debe realizar dicha acción y no estar actualizando o manipulando los datos de otra manera.
En NestJS, una buena práctica es crear un directorio llamado controllers
donde se agruparán todos los controladores que tu aplicación necesite. Ese ya es un buen paso para mantener el orden en tu proyecto.
Apóyate del CLI de NestJS para autogenerar código rápidamente con el comando nest generate controller <controller-name>
o en su forma corta nest g co <controller-name>
.
Es una buena forma de comenzar a seguir las buenas prácticas a la hora de escribir código y estructurar una aplicación.
nest g cor controllers/categories --flat
src/controllers/categories.controller.ts
import { Controller, Get, Param } from '@nestjs/common';
@Controller('categories') // 👈 Route
export class CategoriesController {
@Get(':id/products/:productId')
getCategory(
@Param('productId') productId: string,
@Param('id') id: string
) {
return `product ${productId} and ${id}`;
}
}
nest g co controllers/products --flat
src/controllers/products.controller.ts
import { Controller, Get, Query, Param } from '@nestjs/common';
@Controller('products') // 👈 Route
export class ProductsController {
@Get()
getProducts(
@Query('limit') limit = 100,
@Query('offset') offset = 0,
@Query('brand') brand: string,
) {
return `products limit=> ${limit} offset=> ${offset} brand=> ${brand}`;
}
@Get('filter')
getProductFilter() {
return `yo soy un filter`;
}
@Get(':productId')
getProduct(@Param('productId') productId: string) {
return `product ${productId}`;
}
}
src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ProductsController } from './controllers/products.controller';
import { CategoriesController } from './controllers/categories.controller';
@Module({
imports: [],
controllers: [
AppController,
ProductsController, // 👈 New controller
CategoriesController // 👈 New controller
],
providers: [AppService],
})
export class AppModule {}
Contribución creada por: Kevin Fiorentino.
Aportes 36
Preguntas 7
Para crear controladores puedes usar el generador de código de NestJS con el siguiente comando:
nest g co controllers/categories --flat
Para memorizar los comandos basicos para generar modulo controlador y servicio yo lo utilizo recordando la palabra Mocos (si, mocos)
nest g mo products
nest g co products
nest g s products
Y esto me crea la carpeta con los archivos que necesito.
Hola a todos, en mi caso se me hace mejor agregarlos los controladores por carpetas 😁
nest g co controllers/products
nest g co controllers/categories
nest g co controllers/brands
nest g co controllers/users
nest g co controllers/costumers
nest g co controllers/orders
Codigo para una arquitectura de carpetas escalable, si en un futuro el proyecto tiene reviews o cualquier feature lo insertamos dentro de modules/review, ademas de poder incorporar DTOs e Interfaces dentro de estas subcarpetas.
nest g co modules/order/controller/order --flat
nest g mo modules/order/module/order --flat
nest g s modules/order/service/order --flat
nest g co modules/user/controller/user --flat
nest g mo modules/user/module/user --flat
nest g s modules/user/service/user --flat
nest g co modules/customer/controller/customer --flat
nest g mo modules/customer/module/customer --flat
nest g s modules/customer/service/customer --flat
nest g co modules/category/controller/category --flat
nest g mo modules/category/module/category --flat
nest g s modules/category/service/category --flat
nest g co modules/product/controller/product --flat
nest g mo modules/product/module/product --flat
nest g s modules/product/service/product --flat
nest g co modules/brand/controller/brand --flat
nest g mo modules/brand/module/brand --flat
nest g s modules/brand/service/brand --flat
Este es el resultado graficamente:
nest g co controllers/orders --flat
nest g co controllers/users --flat
nest g co controllers/customers --flat
nest g co controllers/categories --flat
nest g co controllers/products --flat
nest g co controllers/brands --flat
Muy buen curso!!! todo muy bien explicado! Es primera vez que tomo un curso con este profesor y la verdad es que es de los mejores que he visto. Espero que el curso siga con la misma calidad hasta finalizarlo. Felicitaciones @Nicolas Molina.
La arquitectura de carpestas no es trivial es como para una clase entera, no todas escalan ni trabajan igual, hay alguna referencia dependiendo de como se trabaje, en las arquitecturas hexagonales proponen algunas, aun no se cual es mejor 😭
Que hermoso es Nest.js
Yo los separé de esta manera:
nest g nest g res controllers/categories --no-spec
nest g nest g res controllers/users --no-spec
Esto genera los: module,service,controller
El --no-spec es para que no me genere los archivos de test
Qué hermoso es NestJS!.. dioj mio
Hola, para el reto simplemente debemos correr los comandos:
nest g controller controllers/orders --flat
nest g controller controllers/customers --flat
nest g controller controllers/users --flat
nest g controller controllers/brands --flat
y luego creamos los métodos correspondientes dentro de los controladores
Para memorizar los comandos basicos para generar modulo controlador y servicio yo lo utilizo recordando la palabra Mocos (si, mocos) nest g mo products nest g co products nest g s products Y esto me crea la carpeta con los archivos que necesito.
Es bueno de dejar para este curso los controllers jutnos pero para un proyecto real es recomendable trabajar de una manera moudular porque si no se vuelve desordenado el proyecto
Si decidiste usar pnpm y no te funciona bien la CLI de Nest
intenta ejecutando:
pnpm nest g co products
De manera acertada, cuando organizamos nuestros recursos demos de considerar 2 cosas:
.
.
En nuestro caso, se extiende de la arquitectura MVC de la siguiente forma:
.
.
En este diagrama se demuestra que nuestro modelo será gestionada por un ORM a futuro por Prisma que nos permitirá delegar capas como DTO (Data-Transfer-Object) y DAO (Data-Access-Object).
.
Nota. Recomiendo utilizar alias en desarrollo de servidor ya que permitirá una versatilidad al momento de visualizar el origen de los elementos que estamos incorporando.
.
.
.
.
.
la separación en carpetas también puede depender de lo escalable que vaya a ser tu API. pues también se puede separar en módulos con todos sus recursos, o hacer como en el video una carpeta para controladores otra para los servicios y todo lo que deseas incorporar.
Puede ser útil para probar rápido desde la terminal los endpoints:
curl "localhost:3000/products?brand=platzi"
Principio de una sola responsabilidad (SOLID) - Nest
Me pones muy nervioso no usando el intellisence para los imports automáticos -_-
Por que se define el SRP como hacer una cosa ó entenderlo como una unica responsabilidad, es cierto que si, pero la premisa es, “un modulo, debe tener una y solo una razon para cambiar …”
crear controladores dentro de una sola carpeta llamada controllers
crear nuevos controladores
I ❤️ NestJS 🐈
Espera un momento app.module.ts hola Angular ajja
👏
Ojo, creo que eso de borrar la ruta de un controlador, en realidad es obligatorio no opcional.
Para mi en lo personal divido mis controladores y servicios en módulos:
nest g co module/order/controllers/order --flat
nest g co module/user/controllers/user --flat
nest g co module/customer/controllers/customer --flat
nest g co module/category/controllers/category --flat
nest g co module/product/controllers/product --flat
nest g co module/brand/controllers/brand --flat
Entonces luego dentro de cada módulo creo los servicios
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?