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
¿Qué es NestJS?
Crea tu primer proyecto con NestJS
Estructura de aplicaciones en NestJS
Presentación del proyecto: Platzi Store
Repaso a TypeScript: tipos y POO
REST API
Introducción a controladores
GET: cómo recibir parámetros
GET: parámetros query
Separación de responsabilidades
Instalación de Postman o Insomnia
Qué es el método POST
Métodos PUT y DELETE para editar y eliminar
Códigos de estado o HTTP response status codes
Integridad de datos
Introducción a servicios: crea tu primer servicio
Implementando servicios en tu controlador
Manejo de errores con throw y NotFoundException
Introducción a pipes: usa tu primer pipe
Crea tu propio pipe
Creando Data Transfers Objects
Validando parámetros con class-validator y mapped-types
Cómo evitar parámetros incorrectos
Próximos pasos
Reto: controladores y servicios restantes
Continúa con el Curso de NestJS: Programación Modular
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Nicolas Molina
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 33
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
Siento que agrupar los controllers en una sola carpeta no lo hace tan mantenible ni modularizado el proyecto como lo predica NestJS y Angular
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?