Criando uma aplicação em NodeJS, com Express e Handlebars - Parte 1

Aprenda a desenvolver uma aplicação, website, passo a passo em NodeJS, utilizando o Express, Handlebars, e servindo a aplicação online no Heroku.


Este artigo faz parte de uma série de tutoriais que ensinarão passo a passo desde o desenvolvimento até a publicação de um pequeno site de apresentação utilizando o NodeJS e suas ferramentas.

Basicamente um mini curso. Seguindo todos os passos, no final você vai:

  • Saber como instalar e configurar uma aplicação NodeJS.
  • Servir uma aplicação online através do Express.
  • Utilizar Handlebars para fornecer uma interface visual para o usuário com HTML e CSS.
  • Publicar o seu site online no Heroku para que possa ser acessado por qualquer pessoa. Como este de exemplo aqui: Projeto Website

Seja bem-vindo. E bons estudos.


Introdução

No final deste artigo, você será capaz de criar uma aplicação e fornecer uma página bem simples, além de aprender conceitos e conhecer ferramentas importantes para o desenvolvimento.

Caso você esteja começando do zero, será preciso primeiro fazer a instalação do NodeJS em seu ambiente de desenvolvimento. Para isso, basta acessar o site oficial e realizar o download de acordo com o seu sistema operacional.

É recomendável baixar a última versão estável.

https://nodejs.org/en/download/

Após realizar a instalação, rode o comando a seguir no terminal do seu sistema operacional para saber se o NodeJS está sendo reconhecido:

node --version

Caso ainda não possua uma IDE para desenvolvimento, recomendo o Visual Studio Code. Porém, fique à vontade para escolher aquela de sua preferência. Até um bloco de notas servirá, mas conforme a complexidade aumentar, uma ferramenta mais profissional fará uma grande diferença.

Com o NodeJS e a IDE instalados, estamos prontos para começar.


Primeiros passos - Configurando e servindo uma aplicação

Escolha um local onde você gostaria de armazenar os seus projetos, seja na área de trabalho ou nos documentos, e crie uma pasta chamada ProjetoWebsite.

Abra o terminal de sua preferência, seja o próprio do sistema operacional ou da sua IDE, e vá até a pasta recém criada. Rode o seguinte comando:

npm init -y

O npm é um gerenciador de pacotes do Node, por meio dele é possível instalar plugins de terceiros, configurar a aplicação, entre outros. Esse comando criará toda a configuração inicial padrão necessária para começarmos os trabalhos.

Veremos mais para frente detalhadamente o que o arquivo package.json significa e o que podemos fazer com ele, mas por enquanto, façamos a coisa toda funcionar.

Para servir a aplicação, utilizaremos uma framework HTTP bem reconhecida, robusta e extremamente simples de implementar, o Express. Simplificando, essa framework permitirá uma comunicação externa com a aplicação.

O seguinte comando, instalará como dependência do nosso projeto o Express, e assim poderemos utilizá-lo em nossa aplicação. Rode o seguinte comando em seu terminal e na mesma pasta, ProjetoWebsite, em que o npm foi inicializado:

npm i express

Agora poderemos partir para uma parte mais interessante, de fato para uma implementação, algo mais atrativo.

Crie um arquivo chamado server.js na pasta ProjetoWebsite e escreva como no exemplo a seguir. Para fins de aprendizado, recomendo fazer manualmente para que possa entender e assimilar o que está sendo feito.

Os comentários são opcionais, escrevo apenas para que possa ser entendido passo a passo o que está sendo implementado.

// Requisita o módulo Express instalado para que possa ser utilizado na aplicação
const express = require('express')

// Cria uma instância da aplicação/Express
const app = express()

// Registra uma rota get(sinalizando leitura) apontando para a raiz '/'. Exemplo, exemplo.com/
// req: Request - Em resumo, corresponde as entradas, tudo aquilo que é enviado para o servidor 
// res: Response - Corresponde as saídas, tudo aquilo que é desejado enviar para o exterior
app.get('/', (req, res) => {
  // Envia uma string de resposta para a requisição realizada
  res.send('Olá mundo!')
})

// Inicializa o servidor observando a porta 3000
app.listen(3000, () => {
  console.log('Server online')
})

As variáveis "req" e "res" possuem muito mais funcionalidades e informações. Conforme os estudos e o aumento da complexidade serão apresentados mais detalhadamente.

O get de app.get corresponde a um dos métodos de requisição do HTTP, eles são responsáveis por indicar uma determinada ação a ser executada. No momento, é necessário que você entenda que quando se deseja recuperar um recurso específico, se utiliza normalmente o GET para este tipo de solicitação, diferentemente do formulário, que utiliza o POST, para envio de dados do cliente para o servidor.

Em resumo, o código anterior registra uma rota raiz, "/", que quando for acessada pelo browser, será mostrado uma mensagem "Olá mundo!".


Servindo a aplicação

Agora que criamos a aplicação, precisamos vê-la funcionando. Para isso, na pasta do projeto, rode o seguinte comando no terminal:

node server.js

Logo em seguida, você provavelmente verá um log no terminal mostrando a mensagem "Server online", como na imagem a seguir:

Caso ocorra algum erro nesta etapa, verifique se todos os passos anteriores foram realizados corretamente. Se o erro persistir, entre em contato que a sua dúvida será tirada.

Para ver o resultado, basta abrir o browser de sua preferência e digitar "localhost:3000"

Se tudo ocorrer bem, você verá a mensagem "Olá mundo" como resultado de sua requisição. Parabéns. ^^

Façamos agora um último incremento.

Normalmente um site possui várias páginas, o que permite distribuir o conteúdo entre todo ele de forma segmentada. Para isso, façamos então agora um exemplo de uma página Sobre.

No arquivo server.js, criaremos uma rota "/sobre" como no exemplo abaixo.

// ...

app.get('/sobre', (req, res) => {
  res.send("

Um simples tutorial de NodeJS

") }) // ...

Caso o servidor ainda esteja sendo executado devido ao último teste realizado, será preciso parar e iniciá-lo novamente para as mudanças serem aplicadas.

Tecle "ctrl + c" para parar o servidor, e digite novamente "node server.js" para rodar a aplicação.

Atenção: É preciso parar a aplicação anterior porque caso a aplicação tente utilizar a porta "3000" simultaneamente será levantado um erro.

Com o servidor online, acesse a url "localhost:3000/sobre". E se tudo o ocorrer bem, você verá a mensagem sendo exibida.

Caso queira incrementar a primeira rota, e criar um link para navegar para a tela Sobre, modifique a primeira rota como a seguir:

app.get('/', (req, res) => {
    res.send('Olá mundo. Ir para Sobre')
})

Reinicialize novamente a aplicação para que seja aplicado as mudanças e veja se tudo ocorre como o esperado.


Automatizando a reinicialização da aplicação

Para evitar o contratempo de sempre ter que parar a aplicação e reiniciá-la manualmente, nós instalaremos uma ferramenta que fará isso de maneira automática. Após inicializada pela primeira vez, ela basicamente fica monitorando qualquer modificação ocorrida em nossos arquivos para reiniciar a aplicação.

Na pasta do projeto, rode o seguinte comando no terminal:

npm i nodemon -D

O "i" corresponde a "install" e o "-D" sinaliza que o pacote deverá ser instalado apenas nas dependências de desenvolvimento. Ou seja, quando o projeto for enviado para produção, estiver de fato rodando num ambiente final, o nodemon não será instalado. E para produção, existem ferramentas mais adequadas, como o Pm2, mas isso é história para outro dia, não precisa se preocupar no momento.

Após a instalação do pacote anterior, pare o servidor se ainda estiver em execução, e rode o comando a seguir:

npx nodemon server.js

Resultado:

Novamente, se tudo ocorrer bem como na imagem anterior, você verá a mensagem de "Server online", e é só acessar o "localhost:3000" para conferir.

Qualquer modificação que agora seja feita no arquivo, fará com que a aplicação seja automaticamente reinicializada. Pode fazer os testes modificando as mensagens ou criando novas rotas na aplicação.


Para deixar as coisas melhor organizadas e mais profissionais, faremos uso agora do arquivo "package.json" criado na inicialização do npm.

O package.json é responsável por manter uma configuração central, desde dependências até como executar determinadas ferramentas.

Ele se apresenta da seguinte forma:

{
  "name": "ProjetoWebiste",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {},
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

Os nomes são bens sugestivos, dentre eles vale salientar que:

  • devDependencies: dependências de desenvolvimento.
  • dependencies: dependências necessárias para a aplicação funcionar corretamente num ambiente de produção.
  • scripts: conjunto de scripts a serem executados.

Agora, inseriremos o nodemon com a chave "dev" na tag "scripts" responsável por fornecer um modelo para execução de comandos:

"scripts": {
  "dev": "nodemon server.js"
},

Agora para inicializar a aplicação, na pasta ProjetoWebsite, você poderá executar da seguinte forma em seu terminal:

npm run dev

Desta forma, o npm rodará o comando atribuído como "dev" na tag scripts.

conferir se tudo está rodando normalmente, confira a mensagem "Server online" e abra novamente o browser de sua preferência e acesse o "localhost:3000"


Considerações finais

Com o intuito de não ficar um artigo muito longo e cansativo, esta primeira parte foi basicamente para uma apresentação simplificada e inicial de como desenvolver e servir uma aplicação NodeJS com o Express. Nos próximos artigos serão apresentadas funcionalidades mais interessantes, como de fato servir uma página por completo e dinâmica.

Bons estudos e até o próximo artigo.


Próximo artigo: Criando uma aplicação em NodeJS, Express e Handlebars - Parte 2


Um adendo.

Caso você seja iniciante, não precisa se apressar, continue os estudos base do NodeJS e seus principais pacotes para que tenha um conhecimento mais sólido. Aqui eu apresento algo um pouco mais avançado.

Neste artigo aprendemos a configurar, desenvolver e iniciar uma mini aplicação utilizando o NodeJS e Express. Com o passar do tempo, você verá que conforme a complexidade dos projetos aumentam, será preciso estudar novas abordagens e ferramentas.

Como exemplo, caso deseje conhecer, existe a JSagon NodeJS Framework. Sendo desenvolvida a partir de estudos e práticas observadas no desenvolvimento do dia a dia, removendo as complexidade das implementações e agilizando todo o processo.


Caso queira tirar alguma dúvida a respeito das tecnologias utilizadas, implementações ou contratempos que estejam tendo em implementações próprias. Pode entrar em contato clicando aqui.