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: recibir parámetros
GET: parámetros query
Separación de responsabilidades
Instalación de Postman o Insomia
POST: método para crear
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
Data Transfers Objects
Validando parámetros con class-validator y mapped-types
Evitando parámetros incorrectos
Próximos pasos
Reto: controladores y servicios restantes
Continúa con el Curso de NestJS: Programación Modular
Aún no tienes acceso a esta clase
Crea una cuenta y continúa viendo este curso
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 {}
Aportes 21
Preguntas 4
Para crear controladores puedes usar el generador de código de NestJS con el siguiente comando:
nest g co controllers/categories --flat
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
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.
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 😭
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
Que hermoso es Nest.js
Siento que agrupar los controllers en una sola carpeta no lo hace tan mantenible ni modularizado el proyecto como lo predica NestJS y Angular
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? Crea una cuenta o inicia sesión.