![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3797888/Captura_de_tela_em_2017-05-13_00-11-56.png)
# whoami
root Victor Perin
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3591249/pasted-from-clipboard.png)
- Organizador do
NodeSchoolNodeJS Campinas - Desenvolvedor NodeJS na InGaia
- Tapa buraco de Talks (MANDEM TALKS!)
- ❤️ Criptografia / Privacidade / Bitcoins
- ❤️ JS / Docker / NoSQL
- ❤️ Paradigma Funcional / Assíncrono
- ❤️ Automatos / Computer Science
EU SEI QUE NÃO PARECE COMIGO!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3797901/pasted-from-clipboard.png)
Mas antes...
Código Assíncrono
ES5, ES6, ES7, ES8
O Famoso
Event Loop
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3798131/event-loop.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3798137/loupe.gif)
ES5 - Callbacks
O JavaScript "antigo"
setTimeout(function() {
console.log(1);
}, 1000);
setTimeout(function() {
console.log(2);
}, 500);
console.log(3);
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3798070/promises-and-chaining-in-angularjs-into-callback-hell-and-back-again-17-638.jpg)
WELCOME TO
CALLBACK HELL!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3798073/icompile.eladkarako.com_callback_hell.gif)
ES6 - Promises
O JavaScript "avelã"
console.log('running');
const firstPromise = new Promise(resolve =>
setTimeout(() => resolve(1), 500)
);
const secondPromise = new Promise(resolve =>
setTimeout(() => resolve(2), 3000)
);
const promiseGenerator = (number) =>
new Promise(resolve =>
setTimeout(() => resolve(number), 2000)
);
Promise.all([
firstPromise,
secondPromise
])
.then((responses) => console.log(responses))
.then(() => promiseGenerator(3))
.then((result) => console.log(result))
console.log('fim do programa');
PS: ExpressJS Existe antes disso
ES7 - Async/Await
O JavaScript "hipster"
console.log('running');
const asyncFunction = async () => {
console.log('começo async');
const firstResult = await firstPromise();
console.log(firstResult);
const secondResult = await secondResult();
console.log(secondResult);
console.log('fim async');
};
asyncFuntion();
console.log('fim programa');
ES7 - Generators
O JavaScript "super hipster"
function* foo() {
let index = 0;
while (index <= 2)
yield index++;
}
const iterator = foo();
console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
ES8
O JavaScript
"vou vender arte na praia"
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3797888/Captura_de_tela_em_2017-05-13_00-11-56.png)
De volta ao
De onde vem
esse tal de KoaJS?
- Descendente direto do ExpressJS
- Mesmos desenvolvedores do ExpressJS
- Resolve problemas com o ES2015
Vantagens
- Escrito nativamente com generators
- +Modular, com isso, +especialista
- Middlewares
- +Facil de testar
Desvantagens
- >= NodeJS v7.6.0
- - features que o express
- - Conteúdo de suporte
(é novo!)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3797921/Captura_de_tela_em_2017-05-13_00-44-18.png)
Instalação /
Hello World
$ npm install -s koa
const Koa = require('koa')
const app = new Koa()
app.use( context =>
context.body = 'Hello Koa'
)
app.listen(3000)
O objeto Context
context = {
request: {
method: '',
url: '',
header: {},
body: {},
...
},
body: '',
status: 0,
...
};
this <= context.request
(Cuidado com arrow functions nesse caso)
Middlewares and
Cascading
app.use(async (context, next) => {
console.log('teste 1');
await next();
console.log('teste 5');
});
app.use(async (context, next) => {
console.log('teste 2');
await next();
console.log('teste 4');
});
app.use((context) => {
console.log('teste 3');
});
koa-router
$ npm install -s koa-router
const router = require('koa-router')();
router.get('/:id', (context, next) => ... );
app.use(router.routes())
- Multiple Middlewares
- Nested Routes
- Regex
Outros Middlewares
![](https://s3.amazonaws.com/media-p.slid.es/uploads/359304/images/3798111/giphy.gif)
KoaJS
By Victor Perin
KoaJS
- 1,389