Koa.js - Sessões
O HTTP não tem estado, portanto, para associar uma solicitação a qualquer outra solicitação, você precisa de uma maneira de armazenar dados do usuário entre as solicitações HTTP. Cookies e parâmetros de URL são maneiras adequadas de transportar dados entre o cliente e o servidor. No entanto, ambos são legíveis no lado do cliente. As sessões resolvem exatamente esse problema. Você atribui um ID ao cliente e ele faz todas as solicitações adicionais usando esse ID. As informações associadas ao cliente são armazenadas no servidor vinculado a este ID.
Vamos precisar da sessão koa, portanto, instale-a usando -
npm install --save koa-session
Vamos colocar o koa-sessionmiddleware instalado. Neste exemplo, usaremos a RAM para armazenar sessões. Nunca use isso em ambientes de produção. O middleware de sessão trata de tudo, ou seja, criar a sessão, definir o cookie de sessão e criar o objeto de sessão no objeto de contexto.
Sempre que voltarmos a fazer um pedido ao mesmo cliente, teremos as suas informações de sessão armazenadas connosco (visto que o servidor não foi reiniciado). Podemos adicionar mais propriedades a este objeto de sessão. No exemplo a seguir, criaremos um contador de visualizações para um cliente.
var session = require('koa-session');
var koa = require('koa');
var app = koa();
app.keys = ['Shh, its a secret!'];
app.use(session(app)); // Include the session middleware
app.use(function *(){
var n = this.session.views || 0;
this.session.views = ++n;
if(n === 1)
this.body = 'Welcome here for the first time!';
else
this.body = "You've visited this page " + n + " times!";
})
app.listen(3000);
O que o código acima faz é, quando um usuário visita o site, ele cria uma nova sessão para o usuário e atribui um cookie. Na próxima vez que o usuário visitar, o cookie será verificado e a variável de sessão page_view será atualizada de acordo.
Agora, se você executar o aplicativo e for para localhost:3000, você obterá a seguinte resposta.
Se você revisitar a página, o contador de páginas aumentará. Nesse caso, a página foi atualizada 12 vezes.