# whoami

root Victor Perin

  • Organizador do
    NodeSchool NodeJS 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!

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,389