Transcript
Page 1: Del infierno al cielo

Del infierno al cieloRaúl Requero@rrequeroMADRID · NOV 27-28 · 2015

Page 2: Del infierno al cielo

MADRID · NOV 27-28 · 2015

¿Quien soy?

Raúl Requero GarcíaFullstack developer

@rrequero

Page 3: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Recursos

https://github.com/rrequero/resources-delInfiernoAlCielo

Page 4: Del infierno al cielo

MADRID · NOV 27-28 · 2015

var fs = require('fs');fs.readFile('file1.txt', 'utf8', function(err, data1) {

if (err) { return console.log(err); }fs.readFile('file2.txt', 'utf8', function(err, data2) {

if (err) { return console.log(err);} fs.readFile('file3.txt', 'utf8', function(err, data3) {

if (err) { return console.log(err); } fs.writeFile("completeFile.txt", data1+data2+data3, function(err) {

if (err) { return console.log(err); }console.log("File saved!");

}); });

});});

Page 5: Del infierno al cielo

MADRID · NOV 27-28 · 2015

var fs = require('fs');fs.readFile('file1.txt', 'utf8', function(err, data1) {

if (err) { return console.log(err); }fs.readFile('file2.txt', 'utf8', function(err, data2) {

if (err) { return console.log(err);} fs.readFile('file3.txt', 'utf8', function(err, data3) {

if (err) { return console.log(err); } fs.writeFile("completeFile.txt", data1+data2+data3, function(err) {

if (err) { return console.log(err); }console.log("File saved!");

}); });

});});

Page 6: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Posibles soluciones

Promisesvar promise = readFile('file1.txt', 'utf8');promise.then(function(content){

console.log(content);});promise.catch(function(error){

console.error(error);});

Page 7: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Generadores

http://www.ecma-international.org/ecma-262/6.0/

Page 8: Del infierno al cielo

MADRID · NOV 27-28 · 2015

¿Que son?

Los generadores son funciones que permiten tener múltiples puntos de entrada para la suspensión y reanudación de la ejecución.

Los generadores son subtipos de Iterator que incluyen el métodos next.

Este comportamiento es posible utilizando funciones especiales que devuelven un objeto Generador. ( function * (...) ). Dentro de la función se usan las palabras claves yield y yield* para devolver u obtener un valor y throw para lanzar un error.

Una función Generador al ejecutarse comienza en estado suspendido y no comienza su ejecución hasta que se ejecuta por primera vez el método next del objeto Generador devuelto al ejecutar la función

Page 9: Del infierno al cielo

MADRID · NOV 27-28 · 2015

¿Para que no usarlos?

El rendimiento empeora

Page 10: Del infierno al cielo

MADRID · NOV 27-28 · 2015

¿Para que usarlos?

Lazy evaluation (Evaluación perezosa)

Secuencias infinitas

Flujo de control asincrono

Page 11: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Secuencias infinitas

Page 12: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Flujo de control asíncrono

Page 13: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Librerías disponibles

● Co: https://www.npmjs.com/package/co

● Thunks: https://www.npmjs.com/package/thunks

Page 14: Del infierno al cielo

MADRID · NOV 27-28 · 2015

var thunks = require('thunks')();var fs = require('fs');var co = require('co');

var readFile = thunks.thunkify(fs.readFile);var writeFile = thunks.thunkify(fs.writeFile);

co(function* (){try{

var data1 = yield readFile('file1.txt', 'utf8');var data2 = yield readFile('file2.txt', 'utf8');var data3 = yield readFile('file3.txt', 'utf8');

yield writeFile('completeFileSequential.txt', data1+data2+data3);console.log(‘File saved!’);

}catch(e){console.log(e);

}});

Page 15: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Page 16: Del infierno al cielo

MADRID · NOV 27-28 · 2015

¿Que es? Web framework Creado por el equipo que creo ExpressJS Usa generadores (Basado en la librería co) Mejor manejo de los errores Core muy simple, no incorpora middlewares

Page 17: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Diferencias entre Koa y ExpressFuncionalidad Koa Express

Middleware Kernel X X

Routing X

Templating X

Sending Files X

JSONP X

Page 18: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Diferencias entre Koa y ExpressFuncionalidad Koa Express

Middleware Kernel X X

Routing (koa-router) X

Templating (koa-render) X

Sending Files (koa-send) X

JSONP (koa-jsonp) X

Page 19: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Primer app con Koa

var koa = require('koa');var app = koa();

app.use(function *(){ this.body = 'Hello World';});

app.listen(3000);

Page 20: Del infierno al cielo

MADRID · NOV 27-28 · 2015

CascadingMismo sistema de middlewares que otros frameworks.

Podemos lograr ‘true middleware’

Page 21: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Error handlingPor defecto todos los errores se imprimen en stderr

Si NODE_ENV=test los errores no salen por stderr.

app.on('error', function(err, ctx){ log.error('server error', err, ctx);});

Page 22: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context Encapsula los objetos request y response

Se crea una por cada request

Incluye métodos de ayuda

Se accede a él a traves de this

Page 23: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context API ctx.req: Objeto request

ctx.res: Objeto response

ctx.state: Espacio de nombres recomendado para pasar información entre los middlewares

ctx.app: Referencia a la instancia de la aplicación

Page 24: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context API Cookies:

Koa usa la librería: https://github.com/jed/cookies

∘ ctx.cookies.get(name, [options]): Obtener una cookie por nombre

∘ ctx.cookies.set(name, value, [options]): Crear una cookie

Page 25: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context API Throw:

Koa usa la librería: (http-errors)https://github.com/jshttp/http-errors

∘ ctx.throw([msg], [errorCode],[properties])

Ej: this.throw(403, ‘Not authorized’)

Page 26: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context API Assert:

Koa usa la librería: (http-assert) https://github.com/jshttp/http-assert

∘ ctx.assert(value, [msg], [errorCode], [properties])

Ej: this.assert(this.user, ‘Not authorized’, 403)

Page 27: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Context API Alias:

Existen alias para los atributos más utilizados

Request:- header- headers- method- url- ip- etc...

Response:- body- status- message- type- length- etc...

Page 28: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Middlewares Koa-router: https://github.com/alexmingoia/koa-router

Koa-body-parser:https://github.com/koajs/bodyparser

Koa-render: https://github.com/queckezz/koa-views

Page 29: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Middlewares koa-mount: https://github.com/koajs/mount

koa-session: https://github.com/koajs/session

koa-static:https://github.com/koajs/static

koa-logger:https://github.com/koajs/logger (dev)

Page 30: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Ejemplo api

Page 31: Del infierno al cielo

MADRID · NOV 27-28 · 2015

Page 32: Del infierno al cielo

MADRID · NOV 27-28 · 2015


Top Related