JavaScript en servidor

Qué es nodejs

  • NodeJS es un intérprete de JavaScript que se ejecuta en servidor.
  • Está basado en el motor de JavaScript que utiliza Google Chrome (V8), escrito en C++

Características principales

  • Tener el mismo lenguaje en cliente y servidor
    • Permite a cualquier persona desarrollar en backend o en frontend
    • Permite reusar código o incluso mover código de cliente a servidor o al revés
  • Está orientado a eventos y utiliza un modelo asíncrono (propio de JavaScript).
  • Al contrario que en el navegador, encontramos muchas llamadas asíncronas:

    • Llamadas a APIs
    • Lectura y escritura de ficheros
    • Ejecución de cálculos en el servidor
    • ....
  • Llamadas síncronas en servidor serían fatales:

    • ¡Bloqueariamos las conexiones al servidor hasta que acabase la instrucción bloqueante!
    • Al ser asíncrono podremos tener muchas sesiones concurrentes
  • Es monohilo
    • Utiliza un solo procesador
    • Si queremos usar toda la potencia de la CPU, tendremos que levantar varias instancias de node y utilizar un balanceador de carga (por ejemplo con pm2)
  • Es un lenguaje con tipado dinámico y débil (lo cual no es del gusto de todos)

Desventajas

  • Trabajar con código asíncrono hace que a veces el código no sea excesivamente legible
  • Imagina que guardamos un registro de los accesos de los usuarios a nuestra app:
trackUser =  function(userId) {
  users.findOne({userId: userId}, function(err, user) {
    var logIn = {userName: user.name, when: new Date};
    logIns.insert(logIn, function(err, done) {
      console.log('wrote log-in!');
      });
  });
  • Tenemos 3 funciones anidadas en una simple operación.
  • Esto es lo que se conoce como callback hell

Evitar el callback en el navegador

Compatiblidad node con ES6 y más allá

  • El soporte de ES6 en node es limitado
    • Se pude añadir el flag --harmony
    • Se puede utilizar un transpiler, que genere código compatible. El más habitual es babel
  • En el navegador tenemos el mismo problema (mismo motor...): es práctica extendida el uso de transpilers.

Hola Mundo en node

  • Editamos un fichero en JavaScript, holaMundo.js:

    console.log ("Hola Mundo");
    
  • Lo ejecutamos mediante node holaMundo.js
  • Si escribimos node sin más, podemos acceder a la consola de node, un intérprete de JavaScript, similar al que tenemos en el navegador

npm

  • Es el gestor de paquetes de node
    • Gestiona las dependencias de mi aplicación (versiones)
    • Instala paquetes
    • Publica paquetes en npm Orgs
  • Idea similar a Maven en Java o Composer en PHP

results matching ""

    No results matching ""