Introducción a Node.js

Universidad Nacional de Ingeniería

Escuela de Ciencia de la Computación

  • Node.js es un entorno de ejecución para javascript, de código abierto para el lado del servidor.

  • Construido sobre el motor  V8 de Google (C++) .

  • Node.js se usa para realizar aplicaciones web de I/O como sitios de streaming, single web apps, etc.

  • Nos permite correr código Javascript en backend fuera del browser.​

¿Qué es Node.js?

¿Quienes usan Node.js?

¿Por qué usar Node.js?

  • Asíncrono: todas las API de la biblioteca Node.js son asíncronas, es decir, sin bloqueo. Significa esencialmente que un servidor basado en Node.js nunca espera a que una API devuelva datos.
  • Muy rápido: Construido sobre el motor de JavaScript V8 de Google Chrome, la biblioteca Node.js es muy rápida en la ejecución de código.
  • Single Threaded: Node.js utiliza un único modelo de subprocesos (event loop). Mecanismo de evento ayuda al servidor a responder de una manera "non-blocking" y hace que el servidor sea altamente escalable en comparación con los servidores tradicionales que crean hilos limitados para manejar las solicitudes.

¿Qué es un event loop?

  • Un event loop es un único subproceso que realiza todas las operaciones de entrada y salida de forma asíncrona
  • El event loop es una cola de funciones, cuando se ejecuta una función asíncrona, el retorno de esta es insertada en una cola.
  • El motor V8 manda las operaciones a la cola y hace que se procesen en segundo plano para evitar el bloqueo de las otras operaciones.

Event Loop

Ejemplo de event loop

console.log("Inicio");

setTimeout( () => {
    console.log("Dentro de una función asíncrona 1");
}, 3000); 

setTimeout( () => {
    console.log("Dentro de una función asíncrona 2");
}, 3000);

console.log(" Done ");

¿Por qué usar Node.js?

  • No Buffering: Las aplicaciones de Node.js nunca almacenan ningún dato. Estas aplicaciones simplemente dan salida a los datos en partes.
  • Un sólo lenguaje: Con el estándar HTML5 ( HTML, CSS, JS) no es necesario aprender un nuevo lenguaje ya que sólo necesitamos JS.
  • NPM: es un gestor de packetes para Node.js, actualmente alberga miles de packetes libres para descargar y usar.

¿Que es el motor V8?

Un motor JavaScript es un programa o un intérprete que ejecuta Javascript, puede ser implementado como intérprete estándar o como un compilador just-in-time que compila Javascript en bytecode.

  • V8 — open source, developed by Google, written in C++
  • Rhino — managed by the Mozilla Foundation, open source, developed entirely in Java
  • SpiderMonkey — the first JavaScript engine, which back in the days powered Netscape Navigator, and today powers Firefox
  • JavaScriptCore — open source, marketed as Nitro and developed by Apple for Safari
  • KJS — KDE’s engine originally developed by Harri Porten for the KDE project’s Konqueror web browser
  • Chakra (JavaScript) — Microsoft Edge

Antes de empezar...

  • Es necesario tener conocimientos básicos de Javascript...
  • Usaremos el ES6 (ECMAScript 6) estándar de JS del año 2015 .
  • También es necesario tener conocimientos de desarrollo web básico HTML, CSS.
  • Conocimientos de git!! 

Instalación

Un poco de ES6

// Uso de let en vez de var
let variable = 'Hello';

const PI = '3.14';

function suma( a,b ){
    let c = a+b;
    return c;
}

function hello( name ){
    console.log("Hi " + name);
}

// Arrow functions

let suma = (a,b) => a+b;

let hello = name => console.log("Hi " + name);

Ahora con Node.js

// hello.js
// Es de buena suerte comenzar con el Hello World!

console.log("Hello World");

Antes de empezar con lo bueno vamos a ver como funciona un servidor...

Antes de empezar con nuestro servidor vamos a hablar un poco de los módulos

  • Un módulo son como librerías de javascript.
  • Tambien puede ser un conjunto de funciones que vamos a usar en nuestra aplicación.
  • Existen 3 tipos : Built-in modules, from NPM, locale modules.
  • Vamos a crear un módulo de ejemplo...
// Importamos nuestro modulo
const test = require('name_module');

// Usamos el modulo
test.function();

Módulos

Nuestro servidor

// index.js

const http = require("http");
const module = require("./module");
const hostname = "127.0.0.1";
const port = 8080;

const server = http.createServer((req, res) => {
    res.statusCode = 200; //OK
    res.setHeader("Content-Type", "text/plain"); 
    res.write(module.titulo);
    res.write("\n" + dt.message);
    res.write(module.greeting());
    res.write("\n Today is: " + module.myDateTime());
    res.end();
  });

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});
// module.js
console.log("initializing module.js");

module.exports.title = "First server"
module.exports.message = "Welcome to our server";

module.exports.greeting = (name) => { 
    console.log("Hi " + name) 
};

module.exports.getDate = () => Date();

Nuestro módulo

Paquetes de 3ros

Existen numerosos paquetes en internet listos para ser usados, que ya han sido testeados, pero debemo ser cautelosos ya que el abuso de instalación de paquetes puede hacer pesada nuestra aplicación

npm init

Con npm init crea nuestro package.json para poder administrar los paquetes que vamos a ir instalando como lodash, mongo, nodemon, etc..

 

package.json

El archivo package.json nos permite además ver las versiones de lo paquetes que estamos usando así como tambien podemos usar otras directivas

Lodash

Lodash facilita muchas cosas ya que nos permite trabajar con arrays, objetos, numeros, cadenas, etc...

 

// Instalamos con:
// npm i --save lodash

// Load the full build.
var _ = require('lodash');

_.chunk(['a', 'b', 'c', 'd'], 2);
// >> [['a', 'b'], ['c', 'd']]

_.isString(true);
// >> false

_.isString('Andrew');
// >> true

_.uniq([1,2,3,3,2,1,4,5]);
// >> [1,2,3,4,5]

Nodemon

Este paquete monitorea cualquier cambio en nuestra aplicacion node.js y reinicia automaticamente el servidor.

Yargs

Yargs nos ayuda a crear herramientas de línea de comandos interactivas, analizando argumentos y generando una elegante interfaz de usuario

Ahora vamos a crear una aplicación  que cree,lea y elimine notas 

Links

Preguntas?

Node

By gerson231294

Node

An introduction to Node.js

  • 573