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
El 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)
Ver la parte interesante del video: 14:47
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
- Mediante el uso de promesas
- Se trata de escribir código asíncrono con un estilo síncrono.
- Opciones más actuales:
- Generators / Yields (ES6)
- Async / Await (ES7)
- El soporte de ES6 en node es limitado (--harmony) y también en el navegador => TRANSPILERS (babel)
- Ver comparativa de métodos asíncronos
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, igual que el que tenemos en el navegador
npm
- Es el gestor de paquetes de node
- Propongo hacer dos prácticas para coger la dinámica del uso de npm y sus librerías y de trabajar con node:
- Crear una librería en node.js
- Crear una api rest mediante node.js