Skip to content

NodeJs

Es un programa escrito en C++ con el interprete de Google Chrome V8 extendido. Es decir, que utiliza un interprete de Javascript y lo extiende para agregarle bastantes características propias de un servidor.

Nodejs es un servidor servidor, permite crear servicios, servicios que son consumidos por uno o varios clientes (navegadores web por ejemplo). Esto es lo que llamamos Modelo Cliente-Servidor

Requisitos Previos

  • Install Windows Subsystem for Linux

  • Set up Visual Studio Code

  • Node Js

Instalar una versión específica de Node.js usando NVM

Otra forma de instalar Node.js en Ubuntu es hacer uso del Administrador de versiones de nodos (NVM), un script bash que se utiliza para administrar múltiples versiones de Node.js.

Instalar Node.js utilizando el método NVM es ideal si desea utilizar una versión específica. Para comenzar, descargue e instale NVM usando wget:

  1. Abra la consola de Ubuntu y utilice el siguiente comando:
sudo apt-get install wget
  1. Para instalar una versión diferente, reemplace v0.39.0 por otro valor o use el siguiente comando para descargar la versión más reciente:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.39.0/install.sh | bash
  1. Permita que el script NVM se ejecute desde el perfil bash de su usuario:
source ~/.profile

Una vez instalado NVM,

Instalar NVM en su Sistema

  1. Compruebe todas las versiones disponibles de Node.js mediante NVM ejecutando el siguiente comando:
nvm ls-remote
  1. Si bien puede instalar cualquier versión Node.js, le recomendamos que utilice la versión más reciente para garantizar su compatibilidad y confiabilidad. Para este ejemplo, instalaremos la última versión de LTS en el momento de escribir este artículo:
nvm install 20.12.2
  1. Compruebe si se ha instalado correctamente consultando el número de versión actualmente activo:
node -v

Consideraciones antes de de Crear un Proyecto

Dentro del terminal de ubuntu, crear una carpeta donde pretende alojar el proyecto.

mkdir sitealmacen y luego

sudo chmod -R 777 sitealmacen/
cd sitealmacen

Una vez dentro de la carpeta ingresar code . para entrar a visual studio code y desde allí trabajar mejor el proyecto.

Una vez dentro de Visual Studio Code, ingresar a una nueva terminal (Menu de Opciones > Terminal > Nueva Terminal)

Ahora si iniciemos los pasos:

Paso 0:

npm init -y

Con esto se crea el archivo package.json, donde se alojan las diferentes extensiones y librerías del proyecto.

npm i -D typescript

Ahora crear el archivo tsconfig.json

npx tsc -init

Nota: Antes de continuar, hacemos conexión con VS CODE en el entorno para ver los archivos generados

En el archivo tsconfig.json, cambiar

"target": "es6", 
"outDir": "./dist",

Paso 1:

Crear paquete express para Node y Para TypeScript

npm i express
npm i -D @types/express 

Crear el archivo src/server.ts y src/config/index.ts

Crear el archivo src/server.ts

import { App } from './config/index';

  async function main() {
      const app = new App(4000);
    await app.listen();
}

main();

Luego, crear el archivo src/config/index.ts

import express, { Application } from 'express';

export class App {
    app: Application;

    constructor(
        private port?: number | string
    ) {
        this.app = express();
        this.settings();
    }

    private settings() {
        this.app.set('port', this.port || process.env.PORT || 4000);
    }

   async listen() {
        await this.app.listen(this.app.get('port'));
        // await this.app.listen(this.port);
        // console.log('Server on port', this.port);
        console.log('Server on port', this.app.get('port'));
    }

}

Una vez realizado estos dos archivos, ejecutamos con

npx tsc
node dist/server.js

El inconveniente hasta este punto, radica que cada cambio que hagamos debemos ejecutar reiterativamente los comandos

npx tsc

node dist/server.js

Para evitar esto y que al guardar automáticamente compile y genera los javascript correspondientes utilizamos la librería Nodemon, así.

 npm i -D nodemon
 npm i ts-node

Y se configura en package.json

"scripts": {
    "build": "tsc",
    "dev": "nodemon src/server.ts --exec ts-node"
},

Y se ejecuta con npm run dev

[nodemon] 2.0.20
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: ts,json
[nodemon] starting `ts-node src/server.ts`
Server on port 4000

Y si nos dirigimos al navegador y en la URL, colocamos

localhost:4000, nos muestra lo siguiente:

Ya está escuchando el puerto 4000, para las diferentes peticiones.

Luego, se instala el paquete Morgan para ver las peticiones en pantalla

npm i morgan 
npm i @types/morgan

Seguidamente, se configura en el archivo src/config/index.ts

donde se importa la librería morgan,

import morgan from 'morgan';

y luego se llama el método this.middlewares() y se crea el método respectivo

this.middlewares();
....
....
private middlewares() {
        this.app.use(morgan('dev'));
        this.app.use(express.json()); // leer json raw
        this.app.use(express.urlencoded({ extended: false })); //leer json form
}

Código completo

import express, { Application } from 'express';
import morgan from 'morgan';

export class App {
    app: Application;

    constructor(
        private port?: number | string
    ) {
        this.app = express();
        this.settings();
        this.middlewares();
    }

    private settings() {
        this.app.set('port', this.port || process.env.PORT || 3000);
    }

    private middlewares() {
        this.app.use(morgan('dev'));
        this.app.use(express.json()); // leer json raw
        this.app.use(express.urlencoded({ extended: false })); //leer json form
    }


   async listen() {
        await this.app.listen(this.app.get('port'));
        // await this.app.listen(this.port);
        // console.log('Server on port', this.port);
        console.log('Server on port', this.app.get('port'));
    }

}

Nuevamente levantamos nuestro servidor en la terminal

npm run dev

y al dirigirnos al navegador y en la URL, colocamos localhost:4000, nos muestra lo siguiente, nuevamente:

Pero con la diferencia que en la terminal de VStudio Code, donde levantamos el servidor

Refleja que se ha hecho una petición get, así

GET / 404 4.798 ms - 139