Instalando o hapi
Este tutorial é compatível com hapi v16
Crie um novo diretório meuprojeto, entre nele e:
- Execute:
npm inite siga as instruções, esse comando irá gerar o arquivo package.json para você. - Execute:
npm install --save hapiesse comando instalará o hapi e irá salvá-lo no package.json como uma dependência do seu projeto.
É isso! Agora você tem tudo que precisa para criar um servidor usando hapi.
Criando um servidor
O servidor mais simples é semelhante ao seguinte:
'use strict';
const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection({ port: 3000 });
server.start((err) => {
if (err) {
throw err;
}
console.log(`Server running at: ${server.info.uri}`);
});Primeiro, precisamos do hapi. Então, criamos um novo objeto do servidor hapi. Em seguida, adicionamos uma conexão ao servidor, passando o número da porta a ser escutada. E então, o servidor é iniciado e o log indicará que ele está sendo executado.
Ao adicionar a conexão ao servidor, podemos informar um hostname, o endereço IP, ou até mesmo um arquivo de socket Unix ou uma pipe nomeada do Windows para vincular ao servidor. Para mais detalhes, veja a API de referência.
Adicionando rotas
Agora que temos um servidor, vamos acrescentar uma ou duas rotas para que ele realmente faça alguma coisa. Vamos ver como ficaria:
'use strict';
const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection({ port: 3000 });
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('Olá, mundo!');
},
});
server.route({
method: 'GET',
path: '/{name}',
handler: function (request, reply) {
reply('Olá, ' + encodeURIComponent(request.params.name) + '!');
},
});
server.start((err) => {
if (err) {
throw err;
}
console.log(`Servidor rodando em: ${server.info.uri}`);
});Salve o código acima como server.js e inicie o servidor com o comando node server.js. Agora, se você acessar o endereço http://localhost:3000 no seu navegador, verá o texto Olá, mundo!, e se acessar http://localhost:3000/stimpy verá Olá, stimpy!.
Perceba que nós codificamos o parâmetro name na URI, isso é para evitar ataques de injeção de conteúdo. Lembre-se, não é uma boa prática exibir os dados para o usuário sem antes codificá-lo!
O parâmetro method pode ser qualquer método HTTP válido, uma coleção de métodos, ou ainda um asterisco (*), para permitir qualquer método. Já o path define o caminho com a inclusão de parâmetros. Ele pode conter parâmetros opcionais, numerados e até mesmo coringas. Para mais detalhes, veja o tutorial sobre rotas.
Criando páginas estáticas e conteúdo
Provamos que podemos iniciar uma simples aplicação Hapi com o nosso Alô Mundo. A seguir, vamos usar um plugin chamado inert para servir uma página estática. Antes de começar, pare o servidor com CTRL + C.
Para instalar o inert, execute o comando no terminal: npm install --save inert. Esse comando baixará o inert e o adicionará ao package.json, que é o arquivo que indica quais pacotes estão instalados.
Adicione o código abaixo ao seu arquivo server.js:
server.register(require('inert'), (err) => {
if (err) {
throw err;
}
server.route({
method: 'GET',
path: '/hello',
handler: function (request, reply) {
reply.file('./public/hello.html');
},
});
});O comando server.register() adiciona o plugin inert na sua aplicação Hapi. Se algo de errado acontecer, queremos saber. Então, passamos uma função anônima que, se invocada, receberá err e em seguida lançará esse erro. Essa função de retorno é necessária quando registramos os plugins.
O comando server.route() registra a rota /hello, que informa ao seu servidor para aceitar requisições GET para /hello e responder com o conteúdo do arquivo hello.html. Colocamos a função de retorno do roteamento dentro do registro do plugin inert, pois precisamos garantir que inert seja registrado antes de usá-lo para processar a página estática. Em geral, é recomandável executar o código que depende do plugin dentro da função de retorno responsável por registrá-lo, assim teremos a garantia da existência do plugin quando nosso código for executado.
Inicie o seu servidor com npm start e acesse a url http://localhost:3000/hello no seu navegador. Ah não! Recebemos o erro 404, pois nunca criamos o arquivo hello.html. Você precisa criar o arquivo para que o erro não volte a acontecer.
Crie um diretório chamado public na raiz do seu projeto. Depois, crie um arquivo chamado hello.html, dentro desse diretório, com o HTML a seguir: <h2>Olá mundo.</h2>. Em seguida, recarregue a página no seu navegador. Você deverá ler a expressão "Olá mundo.".
Inert exibirá qualquer conteúdo salvo no seu disco rígido quando a requisição for feita, isto é o que leva a carregar em tempo real. Você pode personalizar a página /hello ao seu gosto.
Para mais detalhes sobre como o conteúdo estático funciona acesse Servindo Conteúdo Estático. Essa técnica é comumente usada para imagens, folhas de estilos e páginas estáticas em aplicações web.
Outras informações
Hapi oferece muitas mais capacidades, no entanto apenas algumas estão documentadas em tutoriais como este. Por favor, use a lista da direita para vê-los. Ademais, o restante da documentação pode ser vista na API de referência e, como sempre, sinta-se à vontade para fazer perguntas no github ou visite-nos no slack.