Fundamentos de NestJS

Aprende la serie NestJS Parte 1

· 5 min de lectura
Fundamentos de NestJS

En este post, vamos a ver los fundamentos de NestJS y los fundamentos básicos que forman la columna vertebral de este increíble marco. Para entender mejor los fundamentos de NestJS, también haremos un bootstrap de una aplicación de inicio utilizando Nest CLI.

¿Qué es NestJS?


NestJS es un framework para NodeJS para construir aplicaciones del lado del servidor. Es totalmente compatible con Typescript y utiliza elementos de la programación orientada a objetos.

En el fondo, NestJS utiliza marcos de servidores HTTP como Express y Fastify. Aunque NestJS proporciona una capa de abstracción sobre estos marcos NodeJS, expone sus APIs al desarrollador.

Esto ayuda a los desarrolladores a utilizar cualquier paquete de terceros disponible para el marco del servidor subyacente.

Lenguajes soportados por NestJS


El lenguaje principal utilizado para escribir aplicaciones NestJS es Typescript. Sin embargo, dado que NestJS está construido sobre NodeJS, también soporta Javascript.

Debido a la naturaleza flexible de NestJS, es posible utilizar tanto Typescript como Javascript dependiendo de la necesidad y la experiencia del equipo de desarrollo. Sin embargo, los creadores de NestJS recomiendan utilizar Typescript.

Generación de proyectos NestJS usando Nest CLI


NestJS requiere NodeJS y NPM como requisitos previos. Por lo tanto, asegúrese de que ambos están presentes en tu sistema antes de seguir adelante.

Según la documentación oficial, NestJS requiere una versión de NodeJS superior a la 10.13.

Una vez que NodeJS está instalado, es bastante sencillo arrancar un nuevo proyecto NestJS. Primero tenemos que instalar Nest CLI usando el siguiente comando.

$ npm i -g @nestjs/cli

Aquí, estamos instalando NestJS CLI globalmente. A continuación, podemos utilizar el Nest CLI para crear un nuevo proyecto.

$ nest new demo-project

Este comando creará un directorio llamado demo-project y se instalará node_modules (junto con algunos otros archivos boilerplate). Tendremos un directorio /src con varios archivos del núcleo.

drwxr-xr-x   7 saurabhdashora  staff  224 Jul 24 09:46 .
drwxr-xr-x  16 saurabhdashora  staff  512 Jul 24 09:50 ..
-rw-r--r--   1 saurabhdashora  staff  617 Jul 24 09:46 app.controller.spec.ts
-rw-r--r--   1 saurabhdashora  staff  274 Jul 24 09:46 app.controller.ts
-rw-r--r--   1 saurabhdashora  staff  249 Jul 24 09:46 app.module.ts
-rw-r--r--   1 saurabhdashora  staff  142 Jul 24 09:46 app.service.ts
-rw-r--r--   1 saurabhdashora  staff  208 Jul 24 09:46 main.ts

Los archivos principales de NestJS


A continuación se presenta un breve resumen de los archivos del núcleo de NestJS:

app.controller.ts	This is a minimal controller with a single route
app.controller.spec.ts	This file contains the unit tests for the controller
app.module.ts	The root module for the application
app.service.ts	A basic service with a single method
main.ts	The entry file of the application that uses the core NestFactory function. Basically, this is responsible for starting up the application instance.

Veamos el main.ts con más detalle:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Aquí, en la línea 1, importamos la función NestFactory del paquete @nestjs/core.

El paquete @nestjs/core es el más importante del ecosistema NestJS. Contiene toda la funcionalidad del núcleo de NestJS. Sin el paquete del núcleo de NestJS, otros paquetes de apoyo en NestJS no funcionarán.

El NestFactory expone algunos métodos estáticos. Utilizando el método create(), podemos crear una instancia de la aplicación. Para ello, importamos AppModule y pasarlo a la llamada create(). Consulta la línea 5

Básicamente, el objeto de aplicación proporciona un conjunto de métodos que podemos utilizar para iniciar nuestro oyente HTTP en el puerto 3000. Esto ocurre en la línea 6. Colocamos todo esto en la función bootstrap().

Finalmente, hacemos una llamada a la función bootstrap() en la línea 8.

Ejecución de la aplicación NestJS


El proyecto andamiaje utilizando el Nest CLI tiene todo lo necesario para iniciar la aplicación. Podemos simplemente iniciar el servidor ejecutando el siguiente comando:

$ npm run start

Deberíamos ver una salida como la siguiente:

> demo-project@0.0.1 start /Users/saurabhdashora/NestProjects/demo-project
> nest start

[Nest] 3640  - 07/24/2021, 10:57:51 AM     LOG [NestFactory] Starting Nest application...
[Nest] 3640  - 07/24/2021, 10:57:51 AM     LOG [InstanceLoader] AppModule dependencies initialized +26ms
[Nest] 3640  - 07/24/2021, 10:57:51 AM     LOG [RoutesResolver] AppController {/}: +6ms
[Nest] 3640  - 07/24/2021, 10:57:51 AM     LOG [RouterExplorer] Mapped {/, GET} route +1ms
[Nest] 3640  - 07/24/2021, 10:57:51 AM     LOG [NestApplication] Nest application successfully

Básicamente, este comando inicia el servidor HTTP escuchando en el puerto definido en el archivo main.ts. En nuestro caso, el puerto es el 3000.

Una vez que la aplicación se está ejecutando, podemos visitar el navegador y pulsar http://localhost:3000. Veremos la impresión de ¡Hola Mundo!

También podemos arrancar nuestra aplicación para estar atentos a los cambios de código para recompilar y recargar automáticamente el servidor utilizando el siguiente comando.

$ npm run start:dev

En caso de que te lo preguntes, estos comandos están definidos en el scripts sección del package.json archivo.

"scripts": {
    "start": "nest start",
    "start:dev": "nest start --watch",
}

Independencia de la plataforma NestJS


NestJS pretende ser agnóstico en cuanto a plataformas. Esto hace posible que los desarrolladores de NestJS escriban una lógica reutilizable. En otras palabras, resulta fácil utilizar la misma lógica en diferentes tipos de aplicaciones.

Técnicamente, NestJS puede funcionar con cualquier marco HTTP de Node una vez que se crea un adaptador. Sin embargo, de entrada, soporta tanto Express como Fastify. Los desarrolladores pueden elegir el que mejor se adapte a sus necesidades.

La plataforma-express o express es la opción por defecto. Es un marco minimalista y probado en la batalla con una plétora de recursos de la comunidad.

La otra opción es platform-fastify. Fastify es un framework de alto rendimiento centrado en la eficiencia.

Ambas plataformas tienen su propia interfaz. Estas se ven respectivamente como NestExpressApplication y NestFastifyApplication.

Podemos configurarlos en la llamada app.create() como se indica a continuación:

import { NestFactory } from '@nestjs/core';
import { NestExpressApplication } from '@nestjs/platform-express';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  await app.listen(3000);
}
bootstrap();

El NestExpressApplication se importa de @nestjs/platform-express  paquete.

El enfoque anterior expondrá los métodos específicos de NestExpressApplication como parte del objeto app. Sin embargo, a menos que no deseemos acceder a un método específico, no es necesario especificar un tipo.

Para trabajar con Fastify, tenemos que instalar el platform-fastify  paquete.

$ npm install --save @nestjs/platform-fastify

Una vez realizada la instalación, debemos habilitar FastifyAdapter  dentro del main.ts  en el momento de arrancar la aplicación NestJS.

import { NestFactory } from '@nestjs/core';
import {
  FastifyAdapter,
  NestFastifyApplication,
} from '@nestjs/platform-fastify';
import { AppModule } from './app.module';
​
async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter()
  );
  await app.listen(3000, '0.0.0.0');
}
bootstrap();

Como puede ver, pasamos el NestFastifyApplication al tipo NestFactory.create() método. Además, el create() toma un valor adicional de como entrada - una instancia de FastifyAdapter  clase.

Por defecto, Fastify escucha en localhost 127.0.0.1 solamente. Por lo tanto, para aceptar conexiones en otros hosts, especificamos 0.0.0.0 en el listen () llamada al método.

Conclusión


Con esto, hemos visto con éxito los fundamentos de NestJS y los fundamentos del núcleo.

Hemos instalado Nest CLI seguido por el bootstrapping de nuestro primer proyecto. Además, hemos explorado los archivos de inicio y su propósito junto con una atención especial al archivo main.ts que es responsable de iniciar nuestra aplicación.

Ahora, estamos listos para dar los siguientes pasos en la exploración de más en NestJS.

Plataforma de cursos gratis sobre programación