
# whoami
root Victor Perin

- Organizador do
NodeSchoolNodeJS Campinas - Desenvolvedor NodeJS na InGaia
- Tapa buraco de Talks (MANDEM TALKS!)
- ❤️ Criptografia / Privacidade
- ❤️ JS / Docker / NoSQL
- ❤️ Paradigma Funcional / Assíncrono
- ❤️ Automatos / Computer Science
EU SEI QUE NÃO PARECE COMIGO!

Mas antes...
Código Assíncrono
ES5, ES6, ES7, ES8
O Famoso
Event Loop


ES5 - Callbacks
O JavaScript "antigo"
setTimeout(function() {
console.log(1);
}, 1000);
setTimeout(function() {
console.log(2);
}, 500);
console.log(3);

WELCOME TO
CALLBACK HELL!

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"

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!)

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

KoaJS
By Victor Perin
KoaJS
- 1,511