Casos de éxitoBlogSobre nosotros
Solicitar

Primeros pasos con NestJS: un framework moderno para Node.js

Viktor Kharchenko

14 nov 20235 min de lectura

Software development

Tabla de contenidos

  • ¿Qué es NestJS?

  • Módulos y proveedores

    • Módulos: 

    • Proveedores: 

  • La arquitectura MVC

    • Modelo: 

    • Vista:

    • Controlador: 

  • Compatibilidad con TypeScript

  • Inyección de dependencias

  • Decoradores

    • @Controller: 

    • @Get, @Post, @Put, @Delete: 

    • @Param, @Query, @Body: 

    • @Injectable: 

  • Primeros pasos con tu primer proyecto en NestJS

  • Conclusión

  • Preguntas frecuentes

Node.js ha ganado una enorme popularidad en los últimos años para crear aplicaciones del lado del servidor gracias a su rendimiento y escalabilidad. Si quieres empezar tu camino con Node.js y buscas un framework robusto y bien organizado, NestJS es una excelente opción. En este artículo te presentamos NestJS y te guiamos por sus fundamentos.

¿Qué es NestJS?

NestJS es un framework progresivo de Node.js diseñado para construir aplicaciones del lado del servidor eficientes, escalables y mantenibles. Combina el poder de Node.js con TypeScript, lo que lo convierte en una opción muy atractiva para desarrolladores que prefieren lenguajes con tipado estático. Veamos los aspectos clave de NestJS:

Módulos y proveedores

Las aplicaciones NestJS se construyen con un enfoque modular. Los módulos y los proveedores (providers) son bloques fundamentales de una aplicación NestJS.

Módulos: 

Un módulo es una forma de organizar tu aplicación en partes discretas y reutilizables. Cada módulo encapsula un conjunto de componentes estrechamente relacionados, como controladores, servicios y otros archivos vinculados. Los módulos ayudan a mantener una base de código limpia y ordenada.

Proveedores: 

Los proveedores son clases que pueden inyectarse en otros componentes, como controladores u otros servicios. Desempeñan un papel crucial al definir la lógica de negocio de tu aplicación. Se decoran con el decorador @Injectable(), lo que permite inyectarlos en otros componentes que dependan de ellos.

La arquitectura MVC

NestJS sigue el patrón arquitectónico Modelo-Vista-Controlador (MVC), ofreciendo una forma estructurada y organizada de crear aplicaciones. Esta separación de responsabilidades facilita el mantenimiento del código y promueve la escalabilidad.

Modelo: 

En NestJS, el Modelo representa los datos y la lógica de negocio de tu aplicación. Define la estructura de tus datos y cómo interactúan con la base de datos. Aquí tienes un ejemplo sencillo de un modelo de usuario en TypeScript:

// user.model.ts
export class User {
  id: number;
  username: string;
  email: string;
  // ... other properties and methods
}

Vista:

Aunque NestJS se centra principalmente en el backend, puedes crear APIs que actúen como la "vista" para tus aplicaciones frontend. Los endpoints definidos en los controladores funcionan como la interfaz para que tu frontend se comunique con el servidor.

Controlador: 

Los controladores reciben las solicitudes entrantes, las procesan invocando servicios y devuelven respuestas. Se encargan de definir las rutas y la lógica de manejo de peticiones. Los decoradores desempeñan un papel clave para definir rutas y vincular controladores con endpoints concretos. Aquí tienes un controlador sencillo en NestJS:

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

@Controller('app')
export class AppController {
  @Get()
  getHello(): string {
    return 'Hello, NestJS!';
  }
}

Compatibilidad con TypeScript

TypeScript es un superconjunto de JavaScript con tipado estático, y NestJS lo adopta por completo. Esto te permite escribir código limpio y seguro en tipos que detecta errores en tiempo de compilación, mejorando tu flujo de desarrollo.

TypeScript ofrece funcionalidades como interfaces y comprobación de tipos, muy útiles para definir estructuras de datos y contratos entre distintas partes de tu aplicación. Así garantizas que trabajas con datos coherentes y bien definidos en todo tu proyecto.

Inyección de dependencias

La inyección de dependencias es un patrón de diseño que usa NestJS para gestionar dependencias entre componentes y mejorar la capacidad de prueba de tu código. En esencia, consiste en suministrar a un componente (por ejemplo, un controlador u otro servicio) las dependencias necesarias (servicios u objetos) en lugar de que el propio componente las cree. Esto favorece la reutilización del código y la separación de responsabilidades.

En NestJS puedes crear servicios que encapsulen funcionalidades específicas de tu aplicación. Estos servicios pueden inyectarse en controladores u otros servicios, favoreciendo la modularidad del código. Aquí tienes un ejemplo de un servicio y de cómo inyectarlo en un controlador:


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

@Injectable()
export class CatsService {
  private readonly cats: string[] = [];

  create(cat: string): void {
    this.cats.push(cat);
  }

  findAll(): string[] {
    return this.cats;
  }
}

// cats.controller.ts
import { Controller, Post, Get, Body } from '@nestjs/common';
import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() cat: string) {
    this.catsService.create(cat);
  }

  @Get()
  async findAll(): Promise<string[]> {
    return this.catsService.findAll();
  }
}

En este ejemplo, tenemos un CatsService que encapsula la lógica para gestionar una lista de gatos. Este servicio se inyecta en el CatsController, lo que permite al controlador utilizar la funcionalidad que ofrece el servicio.

Decoradores

Los decoradores son una característica muy potente en NestJS. Permiten definir metadatos y crear diversos decoradores para manejar enrutamiento, validación y otras funciones. Esto simplifica la organización del código y lo hace más legible.

@Controller: 

El decorador @Controller se usa para definir una clase de controlador. Especifica la ruta base para todas las rutas definidas dentro del controlador.

@Get, @Post, @Put, @Delete: 

Estos decoradores se usan dentro de las clases de controlador para indicar los métodos HTTP y las rutas asociadas a los métodos del controlador. Por ejemplo, @Get() define una ruta GET, y @Post() define una ruta POST.

@Param, @Query, @Body: 

Estos decoradores se usan para acceder a los parámetros de ruta, parámetros de consulta y cuerpos de la solicitud dentro de los métodos del controlador. Simplifican la obtención y el procesamiento de datos.

@Injectable: 

El decorador @Injectable() se usa para marcar una clase como proveedor o servicio que puede inyectarse en otros componentes, como controladores u otros servicios.

Primeros pasos con tu primer proyecto en NestJS

Vamos paso a paso para iniciar tu proyecto NestJS:

1. Instalación: Instala NestJS globalmente con npm o yarn:


npm install -g @nestjs/cli
# O
yarn global add @nestjs/cli

2. Crea un proyecto nuevo: Usa el CLI de Nest para crear un proyecto NestJS:


nest new project-name

Este comando generará la estructura del proyecto e instalará las dependencias necesarias.

Explora la estructura: Después de crear tu proyecto, navega a la carpeta del mismo. Encontrarás una estructura bien organizada con carpetas para controladores, módulos, servicios y más.

3. Crea tu primer módulo: Vamos a crear un módulo, un controlador y un servicio. Son componentes esenciales en NestJS:


nest generate module module-name // nest g m module-name
nest generate controller controller-name // nest g c controller-name
nest generate service service-name // nest g s service-name

O utiliza un conjunto de atajos

nest g m module-name
nest g c controller-name
nest g s service-name

Sustituye module-name, controller-name y service-name por nombres significativos para tu proyecto.

4. Define rutas: En tu controlador, usa decoradores como @Get(), @Post() y otros para definir rutas. Implementa la lógica de negocio en tu servicio.

5. Inicia la aplicación: Ejecuta tu aplicación NestJS con el siguiente comando:

npm run start
# O
yarn start

Por defecto, tu aplicación NestJS escuchará en el puerto 3000.

6. Prueba tu API: Abre el navegador o usa herramientas como Postman para probar tus endpoints. Por ejemplo, si tienes una ruta GET definida en tu controlador, puedes acceder a ella en http://localhost:3000/controller-route.

Conclusión

NestJS es un framework potente que simplifica el desarrollo con Node.js, proporcionando una forma estructurada y eficiente de crear aplicaciones del lado del servidor. Tanto si eres nuevo en Node.js como si ya tienes experiencia, NestJS merece la pena. Con los recursos mencionados aquí, estás listo para comenzar tu viaje con NestJS. ¡Feliz codificación!

Preguntas frecuentes

¿Qué es NestJS?

NestJS es un framework progresivo de Node.js para construir aplicaciones del lado del servidor eficientes y escalables.

¿Qué es la arquitectura MVC en NestJS?

MVC separa una app en Modelo, Vista y Controlador, lo que favorece la organización y el mantenimiento del código.

¿Cómo beneficia TypeScript a NestJS?

TypeScript aporta seguridad de tipos, mejora la calidad del código y detecta errores en tiempo de compilación.

¿Qué es la inyección de dependencias en NestJS?

La inyección de dependencias gestiona las dependencias entre componentes y promueve la reutilización y la separación de responsabilidades.

¿Qué son los módulos y proveedores en NestJS?

Los módulos organizan la app en partes, mientras que los proveedores son clases inyectables usadas para definir la lógica de negocio.

¿Cómo creo un nuevo proyecto NestJS?

Usa nest new project-name para generar la estructura de un proyecto con el CLI de Nest.

¿Qué son los decoradores en NestJS?

Los decoradores se usan para definir metadatos y simplificar la organización del código, p. ej., el enrutado con @Get() y @Controller.

¿Cómo inicio mi aplicación NestJS?

Ejecuta npm run start o yarn start; por defecto escucha en el puerto 3000.

¿Cómo pruebo endpoints de API en NestJS?

Usa herramientas como Postman o el navegador accediendo a las URLs de tus endpoints.

¿Puedo crear decoradores personalizados en NestJS?

Sí, puedes crear decoradores personalizados para añadir funcionalidad o metadatos a tu código.

¿Cuál es el papel del decorador @Injectable()?

@Injectable() marca una clase como proveedor, permitiendo que se inyecte en otros componentes.

¿Cómo defino rutas en controladores de NestJS?

Usa decoradores como @Get(), @Post(), etc., dentro de las clases de controlador para definir rutas.

¿NestJS es adecuado tanto para principiantes como para desarrolladores experimentados?

Sí, NestJS es adecuado para todos los niveles, ofreciendo una experiencia de desarrollo estructurada y eficiente.

¿Puedo usar NestJS para crear APIs REST?

Sí, NestJS es una excelente opción para construir APIs REST gracias a sus características de enrutado y decoradores.

¿Qué bases de datos son compatibles con NestJS?

NestJS admite varias bases de datos, como MySQL, PostgreSQL, MongoDB y más, mediante librerías como TypeORM.

¿NestJS es adecuado para aplicaciones en tiempo real?

Sí, puedes usar NestJS para aplicaciones en tiempo real integrando librerías WebSocket como Socket.io.

¿NestJS soporta la arquitectura de microservicios?

Sí, NestJS soporta la arquitectura de microservicios y permite construir sistemas distribuidos.

¿Puedo usar NestJS con un framework frontend como Angular?

Sí, puedes usar NestJS como backend para aplicaciones Angular, con una integración fluida.

¿Existen plugins o extensiones oficiales de NestJS?

Sí, NestJS tiene una comunidad activa y ofrece plugins y extensiones oficiales y de la comunidad.

¿Dónde puedo encontrar documentación y tutoriales de NestJS?

Encontrarás documentación y tutoriales completos en el sitio web oficial de NestJS y en los foros de la comunidad.


 

Publicado el 14 de noviembre de 2023

Compartir


Viktor Kharchenko

Node.js Developer

Digital Transformation Strategy for Siemens Finance

Cloud-based platform for Siemens Financial Services in Poland

See full Case Study
Ad image
Primeros pasos con NestJS: un framework moderno para Node.js
No te pierdas nada: suscríbete a nuestro boletín
Acepto recibir comunicaciones de marketing de Startup House. Haz clic para ver los detalles

También te puede gustar...

Business team analyzing smart locker monetization strategy
Software development

Abstracción en programación

Explora la esencia de la abstracción en programación, analizando su importancia, sus tipos y sus aplicaciones en el mundo real. Desde simplificar sistemas complejos hasta facilitar la colaboración, la abstracción es un pilar del desarrollo de software que moldea la forma en que escribimos código.

Marek Majdak

06 jun 20235 min de lectura

Cómo escribir un README
Software development

Cómo escribir un README

Un archivo README es un componente esencial de cualquier proyecto de software y actúa como una guía completa para usuarios y colaboradores. Presenta el proyecto, ofrece instrucciones de instalación y uso, describe las pautas de contribución e incluye la información de licencia. Un README bien redactado mejora la experiencia de usuario, facilita las contribuciones y aumenta la credibilidad del proyecto. Debe ser claro, conciso y organizado, y estar centrado en las necesidades del público objetivo. Las actualizaciones periódicas aseguran que el README siga siendo relevante y útil. Redactar un README eficaz es una habilidad fundamental para los desarrolladores, pues influye de manera significativa en el éxito y la accesibilidad de sus proyectos.

Marek Majdak

10 nov 20235 min de lectura

Introducción a NestJS y a las API REST
Software development

Introducción a NestJS y a las API REST

Descubre el mundo del desarrollo de APIs RESTful con NestJS, desde el diseño hasta el despliegue de APIs seguras y eficientes. Explora las mejores prácticas y desata tu potencial para crear APIs.

Viktor Kharchenko

21 nov 20235 min de lectura

Event Loop de Node.js y herramientas para programación asíncrona
Software development

Event Loop de Node.js y herramientas para programación asíncrona

Aprende sobre el event loop de Node.js, la programación asíncrona y cómo optimizar el rendimiento del código con el motor V8.

Viktor Kharchenko

23 nov 20235 min de lectura

Business team analyzing smart locker monetization strategy
Software development

Alternativas a Nuxt.Js

¿Buscas alternativas a Nuxt.js? Descubre Next.js, Gatsby, Gridsome, Sapper y Angular Universal como potentes opciones para el desarrollo web.

Marek Majdak

08 mar 20233 min de lectura

Ruby on Rails - guide
Software development

Alternativas a Vue.js - 5 opciones

Descubre alternativas a Vue.js como React.js, Angular, Ember.js, Svelte y Aurelia para crear interfaces de usuario y potenciar el desarrollo web.

Marek Majdak

16 ene 20235 min de lectura

Añadido recientemente

FinTech engineers reviewing transaction processing architecture and financial compliance requirements
FintechFinancial Software DevelopmentFinancial software compliance

Servicios de desarrollo de software financiero

En el software financiero, la fiabilidad, la seguridad y la velocidad no son características, sino condiciones previas para generar confianza. Esta guía cubre los pilares de la ingeniería financiera, el espectro completo de servicios, desde pasarelas de pago hasta sistemas core bancarios, y los stacks tecnológicos idóneos para el procesamiento transaccional de alto rendimiento. Explica estrategias de integración para ecosistemas financieros, los obstáculos de cumplimiento normativo que ralentizan la entrega y los KPIs que conviene seguir tras el lanzamiento. Las tendencias emergentes y los modelos de partnership completan el panorama.

Alexander Stasiak

13 ago 202610 min de lectura

FinTech engineers reviewing transaction processing architecture and financial compliance requirements
FinTechFinancial Software Compliance

Desarrollo de software a medida para seguros

El sector asegurador se rige por normativas y reglas tan específicas y tan dependientes de cada jurisdicción que las plataformas genéricas no las modelan con eficacia. Esta guía explica qué abarca el desarrollo de software de seguros a medida: desde la administración de pólizas y los flujos de gestión de siniestros hasta los motores de tarificación y los portales para clientes. Revisa el stack tecnológico que aporta la fiabilidad que el sector exige, sigue un desarrollo desde la fase de discovery hasta el despliegue y analiza dónde la IA está transformando la suscripción de riesgos. También aborda de forma directa los obstáculos más comunes y el coste real de la inacción.

Alexander Stasiak

11 ago 20268 min de lectura

Outsourced programming team working alongside an in-house product team on shared sprint goals
Software outsourcingComputer programmingCooperation Models

Servicios de outsourcing de programación

El outsourcing de programación ha pasado de ser un mero mecanismo de ahorro de costos a convertirse en una forma de incorporar talento especializado justo cuando la hoja de ruta lo requiere. Esta guía define qué abarcan los servicios de outsourcing de programación, por qué los eligen startups y grandes empresas, y cómo difieren en la práctica los principales modelos de colaboración. También propone un método para evaluar proveedores candidatos y recorre el proceso de entrega, desde la fase de discovery hasta el lanzamiento. Secciones sobre platform engineering, mitigación de riesgos, ROI y tendencias futuras completan el análisis.

Alexander Stasiak

10 ago 20268 min de lectura

Platform engineering team designing a multi-service enterprise platform architecture
Platform EngineeringEnterpriseStartup scalability

Servicios de desarrollo de plataformas empresariales

Una plataforma no es lo mismo que una aplicación: debe dar servicio a múltiples equipos, cargas de trabajo y casos de uso a la vez. Esta guía presenta los pilares de la arquitectura moderna de plataformas empresariales y compara los modelos de colaboración que mejor se adaptan al trabajo de plataforma de larga duración. Analiza plataformas verticales por industria, recorre el ciclo de vida desde el descubrimiento hasta el escalado y aborda los desafíos que dificultan la gobernanza de los proyectos de plataforma. La selección del stack, la preparación para el futuro y el caso de negocio de la mentalidad de plataforma completan la guía.

Alexander Stasiak

09 ago 20269 min de lectura

SaaS developers reviewing multi-tenant architecture and platform uptime metrics
SaaSCloud InfrastructureMulti-Tenancy

Desarrollo de SaaS en 2026

La ingeniería de SaaS es una disciplina aparte; no es simplemente desarrollo web con una suscripción encima. Esta guía explica qué hacen realmente de forma diferente los desarrolladores de SaaS, desde el aislamiento de datos multicliente y la infraestructura de alta disponibilidad hasta la facturación por uso y las optimizaciones de rendimiento críticas para el churn. Cubre las decisiones de stack tecnológico que, sin hacer ruido, determinan tus márgenes a largo plazo, y las habilidades en las que conviene insistir al contratar. Léela antes de encargar trabajo a un equipo o redactar una descripción de puesto.

Alexander Stasiak

08 ago 20268 min de lectura

SaaS product team reviewing multi-tenant platform architecture and subscription metrics
SaaSMulti-TenancySubscription Platforms

Servicios de desarrollo de aplicaciones SaaS

El éxito o fracaso de un producto SaaS depende de decisiones de arquitectura tomadas mucho antes de alcanzar los primeros mil usuarios. Esta guía cubre los pilares arquitectónicos del SaaS moderno, incluida la estrategia de multicliente, los objetivos de disponibilidad y la infraestructura de suscripciones. Recorre, fase por fase, el ciclo de vida del desarrollo, explica dónde encajan la IA y las integraciones avanzadas, y detalla los verdaderos factores de costo detrás del desarrollo de un SaaS. Las consideraciones específicas por industria y las recomendaciones para prepararse para el futuro ayudan a planificar el escalado en lugar de reaccionar ante él.

Alexander Stasiak

07 ago 20269 min de lectura

¿Listo para centralizar tu know-how con IA?

Empieza un nuevo capítulo en la gestión del conocimiento, donde el Asistente de IA se convierte en el pilar central de tu experiencia de soporte digital.

Reservar una consulta gratuita

Trabaja con un equipo de confianza para empresas líderes.

Rainbow logo
Siemens logo
Toyota logo

Construimos lo que viene después.

Empresa

Industrias

Startup Development House sp. z o.o.

Aleje Jerozolimskie 81

Varsovia, 02-001

VAT-ID: PL5213739631

KRS: 0000624654

REGON: 364787848

Contáctanos

hello@startup-house.com

Nuestra oficina: +48 789 011 336

Nuevos negocios: +48 798 874 852

Síguenos

Award
logologologologo

Copyright © 2026 Startup Development House sp. z o.o.

Proyectos UEPolítica de privacidad