SlideShare una empresa de Scribd logo
Huelva 24 de Mayo de 2017
Desarrollo web en con
Presentación
Javi y Chelo
Nos dedicamos al desarrollo de software desde hace 16
años.
Hemos desarrollado el framework Pillars.js, documentado
y liberado como software libre, con licencia MIT.
JavaScript
JavaScript
Brendan Eich
● 1995, Brendan Eich, crea un lenguaje llamado “Mocha”, cuando
pertenecía al grupo de desarrollo del navegador Netscape.
● Después pasó a llamarse “LiveScript”.
● Cuando Netscape es adquirida por Sun Microsystems
(propietaria del lenguaje Java), muy popular en aquellos años, es
renombrado a JavaScript debido a una estrategia de
marketing, aún cuando los lenguajes no están relacionados.
JavaScript - Evolución de herramientas
1995
Mocha
LiveScript
2006 2017
No estandarización en DOM y BOM entre
navegadores.
No había Herramientas de Desarrollador
integradas en el navegador.
1998
1998
2008
RWD
Discutidos y descritos por el World
Wide Web Consortium (W3C) en
julio de 2008 en su recomendación
"Mobile Web Best Practices" bajo
el subtítulo "One Web"
2014
2009
2010
2016
2015
2013
2011
2012
JavaScript
ECMA International, es la organización internacional que crea una amplia gama de
estándares mundiales TIC y CE (electrónica de consumo).
Algunos estándares ECMA son:
- ECMA-262. Especificación del lenguaje ECMAScript
- ECMA-334. Especificación de C#.
- ECMA-335. Especificación del CLI
- ECMA-372. Especificación de C++/CLI
En 1997, se crea un comité ECMA, llamado TC39 para estandarizar JavaScript.
A partir de entonces, los estándares de JavaScript se rigen como ECMAScript.
JavaScript - versiones
Versión ECMAScript Año
ES1 Junio 1997
ES2 Agosto 1998
ES3 Diciembre 1999
ES5 Diciembre 2009
ES 5.1 Junio 2011
ES6 / ES2015 / Harmony Junio 2015
ES7 / ES2016 2016
ES2017 En progreso
ES1
ES1
ES1
ES1
JavaScript - versiones
ES1
ES2
ES3
ES5
ES5.1
ES6
ES7
https://kangax.github.io/compat-table/es6/
Qué es ES y qué no es ES
.getElementById(element) ● Objetos propios del lenguaje
como Object, Array, String,
Date...
● Declaración de variables
● Sentencias condicionales
● Iteradores, bucles
● Manejo de asincronía
● …..
Web API’s ECMAScript
Al escribir código JS disponemos de un gran
número de API’s.
Web API’s
https://developer.mozilla.org/en-US/docs/Web/
API
JavaScript - algunas características...
En JavaScript todo son objetos.
Hay una serie de objetos fundamentales como por ejemplo: Object, Function..
Objetos relacionados con números, fechas y cálculos matemáticos: Number, Math y Date.
Objetos para la manipulación de textos: String y RegExp
Colecciones indexadas: Array...
Colecciones con keys: Map, Set, WeakMap...
JavaScript está basado en prototipos.
JavaScript
String
Propiedades:
- String.length
Métodos:
- String.concat()
- String.slice()
- String.splice()
- …..
Object
Métodos:
- Object.defineProperty()
- Object.entries()
- Object.assign()
- Object.Keys()
- …..
let foo = “hola”;
console.log(foo.length);
//4
console.log(“Qué pasa?”.length);
//9
JavaScript - ES6
Declaración de variables: let y const. Resuelve problemas de alcance.
function getValue(condition){
if (condition){
var value = “blue”;
//…
console.log(“if”, value);
}else{
// ¿Existe aquí la variable value?
console.log(“else”, value);
}
// ¿Y aquí?
console.log(“Fuera del if”, value);
}
getValue(true);
https://jsfiddle.net/lilxelo/tjmojw7k/
JavaScript - ES6
Declaración de variables: let y const. Resuelve problemas de alcance.
Funciones: inicialización de parámetros por defecto, resto de
parámetros(convive con arguments), spread operator, arrow functions…
Objetos: nuevos métodos .is(), .assign(),
inicialización de objetos literales, super…
Desestructuración de objetos, arrays
y parámetros,
ejemplo de desestructuración de objetos:
let node = {
type: "Identifier",
name: "foo"
};
let { type, name, value = true } = node;
console.log(type); // "Identifier"
console.log(name); // "foo"
console.log(value); // true
JavaScript - ES6
Nuevos tipos: Sets y Maps
Iteradores y Generadores: function *createIterator(){yield 1; ….},... for-of
para iterar sobre colecciones de objetos: arrays, maps y sets.
Mejora de Array: nuevos métodos .from(), .of(), .find(), .index() ...
Clases: nueva forma de declarar PROTOTIPOS. Las propiedades
complejas deben seguir siendo declaradas con Object.defineProperty().
Asincronía: promesas.
Módulos: modules e import/export.
Libro de ES6: https://leanpub.com/understandinges6/
JavaScript - ES7
Exponente: let result = 5 ** 2;
Array: Array.prototype.includes();
Cambiar el scope de una función a modo estricto.
JavaScript - ES8 - En progreso
La más relevante ahora:
Asincronía: Async Functions, async y await.
JavaScript - asincronía
setTimeout(
()=>console.log("Primero")
,2000);
console.log("Segundo");
Imprime primero Segundo y a los dos segundos Primero.
JavaScript - asincronía
Diferentes metodologías para la programación asíncrona:
https://www.todojs.com/programacion-asincrona-paso-de-continuadores-eventos-promesas-y-gen
eradores/
readFile("example.txt", function(err, contents) {
if (err) {
throw err;
}
writeFile("example.txt", function(err) {
if (err) {
throw err;
}
console.log("File was written!");
});
});
Patrón
Callback:
JavaScript - asincronía (callbacks hell)
method1(function(err, result) {
if (err) {
throw err;
}
method2(function(err, result) {
if (err) {
throw err;
}
method3(function(err, result) {
if (err) {
throw err;
}
method4(function(err, result) {
if (err) {
throw err;
}
method5(result);
});
});
});
});
A esta problemática le da solución ES6 con
las promesas, y ES8 lo está mejorando con
Async Function.
En Pillars, usamos la librería procedure.
https://github.com/pillarsjs/procedure
JavaScript - librerías
JavaScript - Repositorio de librerías
npm es el manejador de paquetes por
defecto para Node.js, un entorno de
ejecución para JavaScript.
>> npm install nombre_paquete //instala una librería
…
>> npm update //actualiza las dependencias de un proyecto
>> npm init //inicializa un proyecto
>> npm --version //2.7.4
JavaScript
en el servidor
Node.js
Node.js
Apache
servidor http/s
PHP
Petición
(request)
Petición
(request)
Node implementa el servicio HTTP/s
Respuesta
(response)
Respuesta
(response)
Node.js
Por lo tanto, para trabajar en Node.js, hay que tener
claros dos conceptos, HTTP request y el HTTP
response.
El request es la petición al servidor, se compone entre
otros de:
- Método: GET, POST, PUT, etc.
- Path: la URL que se solicita
- Headers
- Body
- …..
Node.js
Petición
(request)
Respuesta
(response)
Node.js
GET php.net HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-ES,es;q=0.8,en;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Cookie: COUNTRY=NA%2C122.16.430.651; LAST_LANG=es; LAST_NEWS=3847110839
Host: php.net
If-Modified-Since: Mon, 09 Nov 2015 11:50:11 GMT
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/46.0.2490.80 Safari/537.36
Ejemplo de cabecera HTTP
Node.js con Pillars.js
Gangway (gw)
Contiene todos los datos de la petición parseados, ejemplo con User Agent:
User Agent tal y como nos viene en la petición:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
En pillars.js:
let userAgent = gw.ua;
/*
ua:{
mobile: false,
os: 'Windows NT 6.1; WOW64',
engine: 'Blink',
browser: 'Chrome'
}
*/
String
propiedad de gangway, con
el user agent en un objeto
Node.js con Pillars.js
Gangway (gw) - algunas propiedades:
var myRoute = new Route(gw=>{
let POST = gw.content.params;
let GET = gw.query;
let cookie = gw.cookie;
let id = gw.id; // id del objeto gangway para la petición.
let ip = gw.ip; // ip del cliente
let browserLang = gw.language; // Primer idioma del navegador del cliente
let cors = gw.cors; // Gestión de orígenes cruzados.
let method = gw.method; // Método de la petición GET y/o POST
let encoding = gw.encoding; // encoding que se utiliza para el envío al cliente.
gw.json(gw);
});
Node.js con Pillars.js
Gangway (gw)
Gangway contiene todos los datos de la petición parseados y métodos para la respuesta, como:
● gw.file(). Envía un archivo. Implementa byte-serving.
● gw.send(). Envía una respuesta, si es string se envía como text/html y si es un objeto lo envía
como objeto parseado tipo application/json.
● gw.html(). Envía una respuesta como text/html
● gw.render(). Este método permite enviar un template renderizado
● gw.json(). Envía una respuesta en formato application/json
● gw.text(). Envía una respuesta parseado como text/plain
Node.js
En principio, desaparece la estructura en
directorios, como en apache/php,
apareciendo el concepto de controlador.
Node.js con Pillars.js
/localhost
web1
index.php
otra.php
Estructura en directorios Controladores
Para una petición HTTP con estos datos, haz esto.
let myRoute = new Route(configuration, handler);
Node.js con Pillars.js
let myRoute = new Route({
id: 'idRoute',
path: '/test',
host: 'localhost',
multipart: true,
cors: false,
https: false,
port: 3006,
method: ['POST', 'GET'],
maxUploadSize: 2*1024*1024,
session: true
}, function(gw){
gw.send(“Tu user agent es” + gw.ua);
});
Configuración
Manejador
Controlador
Ya tenemos en mente dos nuevos conceptos:
● petición y respuesta - Unificados en el objeto
Gangway
● Controlador - que se crea instanciando a la clase
Route.
Hola Mundo
Node.js con Pillars.js Hola Mundo con Pillars.js:
// Inclusión de la librería
var project = require('pillars');
// Ejecutamos el servicio http buit-in
project.services.get('http').start();
// Añadimos el controlador al proyecto
project.routes.add(new Route({
method: ["GET","POST"],
path: '/'
},function(gw){
gw.html("Hola Mundo!!");
}));
Controlador
Node.js con Pillars.js
// Inclusión de la librería
var project = require('pillars');
// Ejecutamos el servicio http buit-in
project.services.get('http').start();
// Añadimos el controlador al proyecto
project.routes.add(new Route({
method: ["GET","POST"],
path: '/'
},function(gw){
gw.html("Hola Mundo!!");
}));
Hola Mundo con Pillars.js:
Controlador
Modelo de servidor
Orientado a objetos
Node.js con Pillars.js
project
config
services
routes
middleware
Configuración del proyecto
Servicios del proyecto
Controladores del proyecto
Middleware del proyecto
Tipo OA
(Object Array)
Node.js con Pillars.js
var project = require('pillars');
project.config; // Configuración del proyecto
project.services; // Servicios del proyecto
project.routes; // Controladores del proyecto
project.middleware; // Middleware del proyecto
Node.js con Pillars.js
// Inclusión de la librería
var project = require('pillars');
// Variables de entorno del proyecto, por defecto….
project.config = {
cors: true,
debug: false,
logFile: false,
maxUploadSize: 5*1024*1024,
//maxCacheFileSize : 5*1024*1024,
//cacheMaxSamples : 100,
//cacheMaxSize : 250*1024*1024,
//cacheMaxItems : 5000,
fileMaxAge : 7*24*60*60,
renderReload: false,
favicon: pillars.resolve('./favicon.ico')
};
Node.js con Pillars.js
// Inclusión de la librería
var project = require('pillars');
// Controladores
project.routes.add(route);
project.routes.remove(idroute);
project.routes.get(idroute);
// Middleware
project.middleware.add(middleware);
project.middleware.remove(idmiddleware);
project.middleware.get(idmiddleware);
// Servicios
project.services.add(service);
project.services.remove(idservice);
project.services.get(idservices);
project.routes
Node.js con Pillars.js
project.services
project.middleware
Tipo Object Array
Modelo de servidor
Orientado a objetos
VENTAJAS
project.routes
CONTROLADORES
ANIDABLES
Conectables y
desconectables
en caliente
Endesarrollo
ECOSISTEMA
PillarsJS
Pillars.js ofrece un ecosistema de herramientas para el
desarrollo web backend en JavaScript
● Especialmente orientado a objetos.
● Server Object Model / Backend Object Model
● Caché automatizado
● Internacionalización
● Programación de tareas
● Templating
● Formateo de texto y fechas
● Sintaxis y nomenclatura homogénea en todo el entorno
● Curva de aprendizaje suave
● ...
Ecosistema - 11 Librerías - útiles por sí mismas
1. JSON.crypt
2. JSON.decycled
3. Date.format
4. String.format
5. scheduled
6. templated
7. textualization
8. procedure
9. ObjectArray
10. jailer
11. crier
EJEMPLO
PillarsJS
Ejemplo de aplicación en la que vamos a activar un directorio estático. En
éste vamos a volcar archivos .hbs y se ejecutarán directamente en la url dada.
1) Instalar node.js https://nodejs.org/es/
2) Archivo package.json
3) Archivo app.js
MIDDLEWARE
PillarsJS
Middleware: Son porciones de código que se ejecutan en toda la aplicación, o solo en ciertos
controladores de ruta con ciertas características. Por lo tanto, podremos crear middleware
que se aplique en toda la aplicación web, es decir, para cualquier solicitud, o que solo se ejecute
en ciertos controladores, dependiendo de la configuración de estos
Cadena de middleware
Petición
(request) Respuesta
(response)
Controlador
Proyectos
IoT Agricultura
Anímate, úsalo y/o Colabora!!
hello@pillarsjs.com
@lilxelo
@bifuer
@pillarsjs
Gracias!!!

Más contenido relacionado

La actualidad más candente

Javascript
JavascriptJavascript
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.js
Mariano Iglesias
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsFátima Casaú Pérez
 
Paralela10
Paralela10Paralela10
Paralela10
Abraham Zamudio
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Iván López Martín
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Exposición Python
Exposición PythonExposición Python
Exposición Python
davidare
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
Jorge Alberto Rodríguez Suárez
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
Javier Turégano Molina
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...RootedCON
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Iván López Martín
 
Introducción a groovy & grails
Introducción a groovy & grailsIntroducción a groovy & grails
Introducción a groovy & grails
Fátima Casaú Pérez
 
Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015
Mariano Reingart
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
javier ramirez
 

La actualidad más candente (18)

Javascript
JavascriptJavascript
Javascript
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.js
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
Paralela10
Paralela10Paralela10
Paralela10
 
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
Greach 2013 - Todo lo que me hubiera gustado saber cuando empecé a desarrolla...
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Exposición Python
Exposición PythonExposición Python
Exposición Python
 
JRuby Al Rescate J2EE
JRuby Al Rescate J2EEJRuby Al Rescate J2EE
JRuby Al Rescate J2EE
 
Gestionando servidores con Puppet
Gestionando servidores con PuppetGestionando servidores con Puppet
Gestionando servidores con Puppet
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
 
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayerCodemotion 2013 - Quiero tiempo real y lo quiero para ayer
Codemotion 2013 - Quiero tiempo real y lo quiero para ayer
 
Clase4_Python-CTIC
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
 
Screen scraping
Screen scrapingScreen scraping
Screen scraping
 
Introducción a groovy & grails
Introducción a groovy & grailsIntroducción a groovy & grails
Introducción a groovy & grails
 
Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015Mini clase Intro Programación Python UTN Profesorado 2015
Mini clase Intro Programación Python UTN Profesorado 2015
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 

Similar a Desarrollo web en Nodejs con Pillars por Chelo Quilón

Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispanohdgarcia
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
BEEVA_es
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
Jose Emilio Labra Gayo
 
javascript
 javascript javascript
javascript
Claudio Padron
 
Javascript
JavascriptJavascript
Javascript
Walter Carmona
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascriptCrisworks
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascriptDavid Blanco
 
Manual javascript
Manual javascriptManual javascript
Manual javascriptHinovska
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
Boris Villon
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
GlobalLogic Latinoamérica
 
Javascript completo
Javascript completoJavascript completo
Javascript completo
Alejandro Garces
 
Javascript
JavascriptJavascript
Javascript
Guiro Lin
 
Javascript
JavascriptJavascript
Javascript
Jorge Osorio
 
Javascript
JavascriptJavascript
Javascript
Maideoz
 
Javascript desde cero
Javascript desde ceroJavascript desde cero
Javascript desde cero
albanis Meza
 
Ajax
AjaxAjax
Ajax
ousli07
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
jaespinmora
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
CloudAppi
 

Similar a Desarrollo web en Nodejs con Pillars por Chelo Quilón (20)

Node js Alt.net Hispano
Node js Alt.net HispanoNode js Alt.net Hispano
Node js Alt.net Hispano
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Java world
Java worldJava world
Java world
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Javascript
JavascriptJavascript
Javascript
 
javascript
 javascript javascript
javascript
 
Javascript
JavascriptJavascript
Javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
Manual javascript
Manual javascriptManual javascript
Manual javascript
 
1117035859 javascript
1117035859 javascript1117035859 javascript
1117035859 javascript
 
Presentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic ClubPresentación Java Evolution - GlobalLogic Club
Presentación Java Evolution - GlobalLogic Club
 
Javascript completo
Javascript completoJavascript completo
Javascript completo
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript
JavascriptJavascript
Javascript
 
Javascript desde cero
Javascript desde ceroJavascript desde cero
Javascript desde cero
 
Ajax
AjaxAjax
Ajax
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Taller desarrollo de apis
Taller desarrollo de apisTaller desarrollo de apis
Taller desarrollo de apis
 

Más de betabeers

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
betabeers
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
betabeers
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
betabeers
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
betabeers
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
betabeers
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
betabeers
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
betabeers
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
betabeers
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
betabeers
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
betabeers
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
betabeers
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
betabeers
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
betabeers
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
betabeers
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
betabeers
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
betabeers
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
betabeers
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
betabeers
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
betabeers
 
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
betabeers
 

Más de betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
 

Último

HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
Ing. Julio Iván Mera Casas
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
samuelvideos
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
cristianrb0324
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
AMADO SALVADOR
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
Carlos Carlosnoemi
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
AlejandraCasallas7
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Festibity
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
aljitagallego
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
evelinglilibethpeafi
 

Último (20)

HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB  S2. PARA VSATMANUAL DEL DECODIFICADOR DVB  S2. PARA VSAT
MANUAL DEL DECODIFICADOR DVB S2. PARA VSAT
 
Desarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdfDesarrollo de habilidades de pensamiento (2).pdf
Desarrollo de habilidades de pensamiento (2).pdf
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Estructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdfEstructuras Básicas_Tecnología_Grado10-7.pdf
Estructuras Básicas_Tecnología_Grado10-7.pdf
 
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
Catalogo General Electrodomesticos Teka Distribuidor Oficial Amado Salvador V...
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Todo sobre Minirobotica. Revista Saber Electronica
Todo sobre  Minirobotica. Revista Saber ElectronicaTodo sobre  Minirobotica. Revista Saber Electronica
Todo sobre Minirobotica. Revista Saber Electronica
 
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdfDesarrollo de Habilidades de Pensamiento.docx (3).pdf
Desarrollo de Habilidades de Pensamiento.docx (3).pdf
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdfProjecte Iniciativa TIC 2024 HPE. inCV.pdf
Projecte Iniciativa TIC 2024 HPE. inCV.pdf
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
actividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañerosactividad 2 tecnologia (3).pdf junto con mis compañeros
actividad 2 tecnologia (3).pdf junto con mis compañeros
 
modelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptxmodelosdeteclados-230114024527-aa2c9553.pptx
modelosdeteclados-230114024527-aa2c9553.pptx
 

Desarrollo web en Nodejs con Pillars por Chelo Quilón

  • 1. Huelva 24 de Mayo de 2017 Desarrollo web en con
  • 2. Presentación Javi y Chelo Nos dedicamos al desarrollo de software desde hace 16 años. Hemos desarrollado el framework Pillars.js, documentado y liberado como software libre, con licencia MIT.
  • 4. JavaScript Brendan Eich ● 1995, Brendan Eich, crea un lenguaje llamado “Mocha”, cuando pertenecía al grupo de desarrollo del navegador Netscape. ● Después pasó a llamarse “LiveScript”. ● Cuando Netscape es adquirida por Sun Microsystems (propietaria del lenguaje Java), muy popular en aquellos años, es renombrado a JavaScript debido a una estrategia de marketing, aún cuando los lenguajes no están relacionados.
  • 5. JavaScript - Evolución de herramientas 1995 Mocha LiveScript 2006 2017 No estandarización en DOM y BOM entre navegadores. No había Herramientas de Desarrollador integradas en el navegador. 1998 1998 2008 RWD Discutidos y descritos por el World Wide Web Consortium (W3C) en julio de 2008 en su recomendación "Mobile Web Best Practices" bajo el subtítulo "One Web" 2014 2009 2010 2016 2015 2013 2011 2012
  • 6. JavaScript ECMA International, es la organización internacional que crea una amplia gama de estándares mundiales TIC y CE (electrónica de consumo). Algunos estándares ECMA son: - ECMA-262. Especificación del lenguaje ECMAScript - ECMA-334. Especificación de C#. - ECMA-335. Especificación del CLI - ECMA-372. Especificación de C++/CLI En 1997, se crea un comité ECMA, llamado TC39 para estandarizar JavaScript. A partir de entonces, los estándares de JavaScript se rigen como ECMAScript.
  • 7. JavaScript - versiones Versión ECMAScript Año ES1 Junio 1997 ES2 Agosto 1998 ES3 Diciembre 1999 ES5 Diciembre 2009 ES 5.1 Junio 2011 ES6 / ES2015 / Harmony Junio 2015 ES7 / ES2016 2016 ES2017 En progreso
  • 9. Qué es ES y qué no es ES .getElementById(element) ● Objetos propios del lenguaje como Object, Array, String, Date... ● Declaración de variables ● Sentencias condicionales ● Iteradores, bucles ● Manejo de asincronía ● ….. Web API’s ECMAScript Al escribir código JS disponemos de un gran número de API’s. Web API’s https://developer.mozilla.org/en-US/docs/Web/ API
  • 10. JavaScript - algunas características... En JavaScript todo son objetos. Hay una serie de objetos fundamentales como por ejemplo: Object, Function.. Objetos relacionados con números, fechas y cálculos matemáticos: Number, Math y Date. Objetos para la manipulación de textos: String y RegExp Colecciones indexadas: Array... Colecciones con keys: Map, Set, WeakMap... JavaScript está basado en prototipos.
  • 11. JavaScript String Propiedades: - String.length Métodos: - String.concat() - String.slice() - String.splice() - ….. Object Métodos: - Object.defineProperty() - Object.entries() - Object.assign() - Object.Keys() - ….. let foo = “hola”; console.log(foo.length); //4 console.log(“Qué pasa?”.length); //9
  • 12. JavaScript - ES6 Declaración de variables: let y const. Resuelve problemas de alcance. function getValue(condition){ if (condition){ var value = “blue”; //… console.log(“if”, value); }else{ // ¿Existe aquí la variable value? console.log(“else”, value); } // ¿Y aquí? console.log(“Fuera del if”, value); } getValue(true); https://jsfiddle.net/lilxelo/tjmojw7k/
  • 13. JavaScript - ES6 Declaración de variables: let y const. Resuelve problemas de alcance. Funciones: inicialización de parámetros por defecto, resto de parámetros(convive con arguments), spread operator, arrow functions… Objetos: nuevos métodos .is(), .assign(), inicialización de objetos literales, super… Desestructuración de objetos, arrays y parámetros, ejemplo de desestructuración de objetos: let node = { type: "Identifier", name: "foo" }; let { type, name, value = true } = node; console.log(type); // "Identifier" console.log(name); // "foo" console.log(value); // true
  • 14. JavaScript - ES6 Nuevos tipos: Sets y Maps Iteradores y Generadores: function *createIterator(){yield 1; ….},... for-of para iterar sobre colecciones de objetos: arrays, maps y sets. Mejora de Array: nuevos métodos .from(), .of(), .find(), .index() ... Clases: nueva forma de declarar PROTOTIPOS. Las propiedades complejas deben seguir siendo declaradas con Object.defineProperty(). Asincronía: promesas. Módulos: modules e import/export. Libro de ES6: https://leanpub.com/understandinges6/
  • 15. JavaScript - ES7 Exponente: let result = 5 ** 2; Array: Array.prototype.includes(); Cambiar el scope de una función a modo estricto.
  • 16. JavaScript - ES8 - En progreso La más relevante ahora: Asincronía: Async Functions, async y await.
  • 18. JavaScript - asincronía Diferentes metodologías para la programación asíncrona: https://www.todojs.com/programacion-asincrona-paso-de-continuadores-eventos-promesas-y-gen eradores/ readFile("example.txt", function(err, contents) { if (err) { throw err; } writeFile("example.txt", function(err) { if (err) { throw err; } console.log("File was written!"); }); }); Patrón Callback:
  • 19. JavaScript - asincronía (callbacks hell) method1(function(err, result) { if (err) { throw err; } method2(function(err, result) { if (err) { throw err; } method3(function(err, result) { if (err) { throw err; } method4(function(err, result) { if (err) { throw err; } method5(result); }); }); }); }); A esta problemática le da solución ES6 con las promesas, y ES8 lo está mejorando con Async Function. En Pillars, usamos la librería procedure. https://github.com/pillarsjs/procedure
  • 21. JavaScript - Repositorio de librerías npm es el manejador de paquetes por defecto para Node.js, un entorno de ejecución para JavaScript. >> npm install nombre_paquete //instala una librería … >> npm update //actualiza las dependencias de un proyecto >> npm init //inicializa un proyecto >> npm --version //2.7.4
  • 24. Node.js Por lo tanto, para trabajar en Node.js, hay que tener claros dos conceptos, HTTP request y el HTTP response. El request es la petición al servidor, se compone entre otros de: - Método: GET, POST, PUT, etc. - Path: la URL que se solicita - Headers - Body - ….. Node.js Petición (request) Respuesta (response)
  • 25. Node.js GET php.net HTTP/1.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch Accept-Language: es-ES,es;q=0.8,en;q=0.6 Cache-Control: max-age=0 Connection: keep-alive Cookie: COUNTRY=NA%2C122.16.430.651; LAST_LANG=es; LAST_NEWS=3847110839 Host: php.net If-Modified-Since: Mon, 09 Nov 2015 11:50:11 GMT Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 Ejemplo de cabecera HTTP
  • 26. Node.js con Pillars.js Gangway (gw) Contiene todos los datos de la petición parseados, ejemplo con User Agent: User Agent tal y como nos viene en la petición: User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36 En pillars.js: let userAgent = gw.ua; /* ua:{ mobile: false, os: 'Windows NT 6.1; WOW64', engine: 'Blink', browser: 'Chrome' } */ String propiedad de gangway, con el user agent en un objeto
  • 27. Node.js con Pillars.js Gangway (gw) - algunas propiedades: var myRoute = new Route(gw=>{ let POST = gw.content.params; let GET = gw.query; let cookie = gw.cookie; let id = gw.id; // id del objeto gangway para la petición. let ip = gw.ip; // ip del cliente let browserLang = gw.language; // Primer idioma del navegador del cliente let cors = gw.cors; // Gestión de orígenes cruzados. let method = gw.method; // Método de la petición GET y/o POST let encoding = gw.encoding; // encoding que se utiliza para el envío al cliente. gw.json(gw); });
  • 28. Node.js con Pillars.js Gangway (gw) Gangway contiene todos los datos de la petición parseados y métodos para la respuesta, como: ● gw.file(). Envía un archivo. Implementa byte-serving. ● gw.send(). Envía una respuesta, si es string se envía como text/html y si es un objeto lo envía como objeto parseado tipo application/json. ● gw.html(). Envía una respuesta como text/html ● gw.render(). Este método permite enviar un template renderizado ● gw.json(). Envía una respuesta en formato application/json ● gw.text(). Envía una respuesta parseado como text/plain
  • 29. Node.js En principio, desaparece la estructura en directorios, como en apache/php, apareciendo el concepto de controlador.
  • 30. Node.js con Pillars.js /localhost web1 index.php otra.php Estructura en directorios Controladores Para una petición HTTP con estos datos, haz esto. let myRoute = new Route(configuration, handler);
  • 31. Node.js con Pillars.js let myRoute = new Route({ id: 'idRoute', path: '/test', host: 'localhost', multipart: true, cors: false, https: false, port: 3006, method: ['POST', 'GET'], maxUploadSize: 2*1024*1024, session: true }, function(gw){ gw.send(“Tu user agent es” + gw.ua); }); Configuración Manejador Controlador
  • 32. Ya tenemos en mente dos nuevos conceptos: ● petición y respuesta - Unificados en el objeto Gangway ● Controlador - que se crea instanciando a la clase Route.
  • 34. Node.js con Pillars.js Hola Mundo con Pillars.js: // Inclusión de la librería var project = require('pillars'); // Ejecutamos el servicio http buit-in project.services.get('http').start(); // Añadimos el controlador al proyecto project.routes.add(new Route({ method: ["GET","POST"], path: '/' },function(gw){ gw.html("Hola Mundo!!"); })); Controlador
  • 35. Node.js con Pillars.js // Inclusión de la librería var project = require('pillars'); // Ejecutamos el servicio http buit-in project.services.get('http').start(); // Añadimos el controlador al proyecto project.routes.add(new Route({ method: ["GET","POST"], path: '/' },function(gw){ gw.html("Hola Mundo!!"); })); Hola Mundo con Pillars.js: Controlador
  • 37. Node.js con Pillars.js project config services routes middleware Configuración del proyecto Servicios del proyecto Controladores del proyecto Middleware del proyecto Tipo OA (Object Array)
  • 38. Node.js con Pillars.js var project = require('pillars'); project.config; // Configuración del proyecto project.services; // Servicios del proyecto project.routes; // Controladores del proyecto project.middleware; // Middleware del proyecto
  • 39. Node.js con Pillars.js // Inclusión de la librería var project = require('pillars'); // Variables de entorno del proyecto, por defecto…. project.config = { cors: true, debug: false, logFile: false, maxUploadSize: 5*1024*1024, //maxCacheFileSize : 5*1024*1024, //cacheMaxSamples : 100, //cacheMaxSize : 250*1024*1024, //cacheMaxItems : 5000, fileMaxAge : 7*24*60*60, renderReload: false, favicon: pillars.resolve('./favicon.ico') };
  • 40. Node.js con Pillars.js // Inclusión de la librería var project = require('pillars'); // Controladores project.routes.add(route); project.routes.remove(idroute); project.routes.get(idroute); // Middleware project.middleware.add(middleware); project.middleware.remove(idmiddleware); project.middleware.get(idmiddleware); // Servicios project.services.add(service); project.services.remove(idservice); project.services.get(idservices);
  • 42. Modelo de servidor Orientado a objetos VENTAJAS
  • 46. PillarsJS Pillars.js ofrece un ecosistema de herramientas para el desarrollo web backend en JavaScript ● Especialmente orientado a objetos. ● Server Object Model / Backend Object Model ● Caché automatizado ● Internacionalización ● Programación de tareas ● Templating ● Formateo de texto y fechas ● Sintaxis y nomenclatura homogénea en todo el entorno ● Curva de aprendizaje suave ● ...
  • 47. Ecosistema - 11 Librerías - útiles por sí mismas 1. JSON.crypt 2. JSON.decycled 3. Date.format 4. String.format 5. scheduled 6. templated 7. textualization 8. procedure 9. ObjectArray 10. jailer 11. crier
  • 49. PillarsJS Ejemplo de aplicación en la que vamos a activar un directorio estático. En éste vamos a volcar archivos .hbs y se ejecutarán directamente en la url dada. 1) Instalar node.js https://nodejs.org/es/ 2) Archivo package.json 3) Archivo app.js
  • 51. PillarsJS Middleware: Son porciones de código que se ejecutan en toda la aplicación, o solo en ciertos controladores de ruta con ciertas características. Por lo tanto, podremos crear middleware que se aplique en toda la aplicación web, es decir, para cualquier solicitud, o que solo se ejecute en ciertos controladores, dependiendo de la configuración de estos Cadena de middleware Petición (request) Respuesta (response) Controlador
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 60.
  • 61. Anímate, úsalo y/o Colabora!! hello@pillarsjs.com @lilxelo @bifuer @pillarsjs