NestJS es un framework para construir aplicaciones Javascript backend en Node de forma rápida y escalable. Soporte completo para el uso de TypeScript, con esta herramienta conviertes el mecanismo de escribir JS como si tuviera “tipado fuerte”.
Por defecto utiliza Express para montar un servidor web HTTP aunque también puede configurarse Fastify fácilmente.
Con Nest vas a tener una arquitectura base para construir tus aplicaciones, muy inspirada en Angular.
Como empezar a usar Nest JS
Requisitos
Necesitas tener previamente instalado Node JS para poder ejecutar el instalador de paquetes npm.
Instalación de NestJS
Para construir el esqueleto de un nuevo proyecto en Nest JS puedes ejecutar los siguientes comandos. De esta manera se generarán los directorios y ficheros básicos iniciales.
$ npm i -g @nestjs/cli
$ nest new nombre-proyecto
Se genera el directorio src con algunos ficheros core:
- src
- app.controller.spec.ts: Un controlador básico.
- app.controller.ts: Pruebas unitarios del controlador.
- app.module.ts: El módulo raíz de la aplicación.
- app.service.ts: Servicio básico con un único método.
- main.ts: Fichero de entrada de la aplicación que usa la función core NestFactory para crear una instancia de la aplicación Nest.
Plataforma HTTP
NestJS es agnóstico de la plataforma. Está preparado para trabajar con cualquier Framework HTTP de NodeJS. Soporta Out-Of-The-Box tanto Express como Fastify.
Para poder inicializar el API de Express o Fastify podemos hacerlo del siguiente modo:
const app = await NestFactory.create<NestExpressApplication>(AppModule);
Ejecutar la aplicación
Puedes ejecutar el siguiente comando para levantar la aplicación y se quede a la espera de recibir peticiones HTTP.
$ npm run start
Este comando levantará el servidor HTTP y escuchará en el puerto definido en el fichero src/main.ts.
Para monitorizar los cambios en los ficheros de desarrollo puedes levantar la aplicación de la siguiente forma:
$ npm run start:dev
Controladores
Una vez que tenemos instalada y sabemos levantar la aplicación podemos meternos en faena. En este punto aprenderemos a programar controladores, estos serán los responsables de procesar las peticiones HTTP que lleguen al servidor.
Enrutamiento (routing)
frutas.controller.js
import { Controller, Get } from '@nestjs/common';
@Controller('frutas')
export class FrutasController {
@Get()
findAll() {
return 'Este metodo devolvera todas las frutas';
}
}
Proveedores
Esta es la capa de servicios que gestiona la aplicación y que se inyectan como dependencia en los controladores. Es decir, el controlador delegará en los proveedores la ejecución de la lógica de negocio. Fichero frutas.service.ts.
import { Injectable } from '@nestjs/common';
import { Fruta } from './interfaces/fruta.interface';
@Injectable()
export class FrutasService {
private readonly frutas: Fruta[] = [];
create(fruta: Fruta) {
this.cats.push(fruta);
}
findAll(): Fruta[] {
return this.frutas;
}
}
Interfaz en el fichero interfaces/cat.interface.ts:
export interface Fruta {
name: string;
tipo: string;
}
Como ahora tenemos un servicio de “Frutas”, podemos modificar el controlador para que haga uso de el, fichero cats.controller.ts.
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateFrutaDto } from './dto/create-fruta.dto';
import { FrutasService } from './frutas.service';
import { Fruta } from './interfaces/fruta.interface';
@Controller('frutas')
export class FrutasController {
constructor(private frutasService: FrutasService) {}
@Post()
async create(@Body() createFrutaDto: CreateFrutaDto) {
this.frutasService.create(createFrutaDto);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.frutasService.findAll();
}
}
Más recursos de backend JS
Node JS | JS en backend, código abierto y multiplataforma |
Nest JS | Montado sobre Node, soporta typescript, escribe aplicaciones rápidamente de forma escalable |
Express JS | Se despliega sobre Node, gestión de direccionamiento y soporte completo para montar un servidor |
Node JS con MongoDB | Te mostramos un ejemplo para conectar NodeJS con la base de datos NoSQL MongoDB |
Recursos básicos JS
Prototype | Añadir propiedades de forma dinámica a un objeto |
toLocaleString | Herramienta esencial para el formateo de fechas y números en aplicaciones internacionales |
Recursividad y pila | Uso de recursividad y funcionamiento de la pila JS |
Desestructuración | Mecanismo para desempaquetar arrays y objetos |
Manejo de Strings | Manejo básico de Strings, cadenas de caracteres |
Operadores | Uso de operadores de comparación y lógicos |
Promesas | Gestión de peticiones asíncronas con promesas |
Sleep | Implementación de la función sleep() en JS |
This | Uso de la palabra reservada this en diferentes contextos |
Maps | Te enseñamos cuando usar Map y cuando Object con ejemplos |
Switchery JS | Librería para modificar el estilo de los checkbox |
Mejores libros Javascript Español | Encuentra los mejores libros para aprender JS y convertirte en el desarrollador más demandado. |
Exception JS | Manejo de excepciones en Javascript, control de errores y flujo de programa. |
Obfuscator Javascript | Protege tu código Javascript Ofuscándolo |
Javascript desde cero | Aprende los conceptos básicos de Javascript, ponte en marcha. |
Lodash | Lodash hace que la manipulación de datos en JavaScript sea más fácil y menos propensa a errores |
Formatdate JS | Formateo y trabajo con fechas en javascript de forma sencilla. |
Dayjs | Biblioteca para la gestión de fechas |
padStart | Maneja cadenas de texto con la función padStart() |