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.