Skip to content

Latest commit

 

History

History
324 lines (248 loc) · 12.2 KB

File metadata and controls

324 lines (248 loc) · 12.2 KB

shieldsIO shieldsIO shieldsIO

WideImg

Máster en Programación FullStack con JavaScript y Node.js

JS, Node.js, Frontend, Backend, Firebase, Express, Patrones, HTML5_APIs, Asincronía, Websockets, Testing

Clase 48

Node.js

Node_logo

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web. Fue creado por Ryan Dahl en 2009 y su evolución está apadrinada por la empresa Joyent, que además tiene contratado a Dahl en plantilla - Wikipedia

Otra manera es posible

bloqueo

Puntos Fuertes

  • Asincronía (no bloqueo)
  • Backend completo
  • NPM (comunidad)
  • Single thread (paralelismo)
  • Librerías propias
  • Utilidades
  • Código abierto
  • Basado en el V8 (escrito en C++) de Google. Proporciona un entorno de ejecución del lado del servidor que compila y ejecuta a Javascript a altas velocidades. V8 compila Javascript en código máquina nativo, en lugar de interpretarlo.
  • Multiplataforma. Mac OS X, Windows, Linux
  • Orientado a Eventos
  • Node es usado en webs como Ebay, Microsoft, paypal, Netflix, Uber, Linkedin, Medium, Nasa, Trello, Wikipedia...
  • No se limita solo a servidores HTTP

Dónde utilizar Node.js

  • Chats. Mensajería instantánea. Tiempo real y multiusuario
  • API de manejo de una DB de Objetos. Paso de objetos JSON a la BBDD simplificado.
  • Entradas en cola. Manejar conexiones simultáneas. Evita cuello de botella.
  • Streaming de datos. Procesar archivos mientras se siguen cargando
  • Sevidores para gaming online
  • Proxy. Soporta multitud de conexiones simultáneas. Visualización en tiempo real e interacción.
  • SaaS para para monitoreo de sistemas desde panel web
  • Monitoreo de aplicaciones
  • IoT
  • 6 Awesome Things You Can Do With NodeJS

Librerías interesantes

JSDramas

IO.js

IO_logo or node_logo

io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above.

Dependencias, dependencias, dependencias... y más dependencias

IMG

module.exports = leftpad;

function leftpad (str, len, ch) {
  str = String(str);

  var i = -1;

  if (!ch && ch !== 0) ch = ' ';

  len = len - str.length;

  while (++i < len) {
    str = ch + str;
  }

  return str;
}

EventStream is like functional programming meets IO

IMG

var es = require('event-stream')
var inspect = require('util').inspect

process.stdin                        //connect streams together with `pipe`
  .pipe(es.split())                  //split stream to break on newlines
  .pipe(es.map(function (data, cb) { //turn this async function into a stream
    cb(null
      , inspect(JSON.parse(data)))   //render it nicely
  }))
  .pipe(process.stdout)              // pipe it to stdout !

C9.io

c9_logo

Características estrella

  • Code together in real time
  • Share your IDE, your workspace, a preview, or your running app
  • Replay all edits and see your code at any point in time

Otras características

  • Preview in any browser
  • Built-In Terminal
  • Language Tools
  • Debugger
  • Split View
  • Themes
  • Run Panel
  • Key Bindings Editor
  • VIM/Emacs/Sublime Mode
  • Built-In Image Editor

Más

Terminal UNIX

Nodejs

Node_logo

    node -v
  • Npm
    npm -v
  • Arrancar Node.js en consola
    $ node

Hello World

  • Hola mundo!:
  console.log("Hola Mundo!");
  • Hola mundo! (retraso):
  setTimeout(function() {
    console.log("Hola Futuro...!");
  }, 5000);
  • Hola mundo! (repetición):
  setInterval(function() {
    console.log("Hola Futuro...!");
  }, 1000);

Console

console.assert(value[, message][, ...])

console.assert(true, 'No me muestro!');
console.assert(false, 'Me muestro');

console.time() y console.timeEnd()

console.time('100-elementos');
for (var i = 0; i < 100; i++) {
  console.log(i);
}
console.timeEnd('100-elementos');
// 100-elementos: 5ms

Sustituciones

  • %d Enteros y coma flotante
	console.log("Tenemos %d usuarios conectados", 10);
  • %s Cadenas
	console.log("Tenemos %s usuarios conectados", "muchos");
  • %j Objetos JSON
	console.log("Tenemos %j", {alumnos:{total:15, estado:"conectados"}});

Creamos un fichero main.js para ejecutar

  • Hola mundo!:
  console.log("Hola Mundo desde fichero js!");

Creamos nuestro primer servidor en Node!!

  • Código del servidor server.js:
  // Importamos módulo HTTP
  var http = require('http');
  // Código para arrancar el sevidor
  http.createServer(function (req, res) {
      // Devolver al DOM la respuesta que debe mostrar
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hola! Esta es la primera respuesta desde mi servidor :)');
      // Escuchando en puerto 8080
  }).listen(8080);
  // Mensaje a mostrar cuando arranque el servidor
  console.log("Servidor ejecutándose en localhost. http://127.0.0.1:8080");

Los conceptos clave

Loop

Arquitecura diferente

Single Thread

Multi Thread