del infierno al cielo
TRANSCRIPT
Del infierno al cieloRaúl Requero@rrequeroMADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015
¿Quien soy?
Raúl Requero GarcíaFullstack developer
@rrequero
MADRID · NOV 27-28 · 2015
Recursos
https://github.com/rrequero/resources-delInfiernoAlCielo
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!");
}); });
});});
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!");
}); });
});});
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);});
MADRID · NOV 27-28 · 2015
Generadores
http://www.ecma-international.org/ecma-262/6.0/
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
MADRID · NOV 27-28 · 2015
¿Para que no usarlos?
El rendimiento empeora
MADRID · NOV 27-28 · 2015
¿Para que usarlos?
Lazy evaluation (Evaluación perezosa)
Secuencias infinitas
Flujo de control asincrono
MADRID · NOV 27-28 · 2015
Secuencias infinitas
MADRID · NOV 27-28 · 2015
Flujo de control asíncrono
MADRID · NOV 27-28 · 2015
Librerías disponibles
● Co: https://www.npmjs.com/package/co
● Thunks: https://www.npmjs.com/package/thunks
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);
}});
MADRID · NOV 27-28 · 2015
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
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
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
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);
MADRID · NOV 27-28 · 2015
CascadingMismo sistema de middlewares que otros frameworks.
Podemos lograr ‘true middleware’
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);});
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
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
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
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’)
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)
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...
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
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)
MADRID · NOV 27-28 · 2015
Ejemplo api
MADRID · NOV 27-28 · 2015
MADRID · NOV 27-28 · 2015