rotas

Rotas no Express – Node.js

Introdução

Uma rota em uma API é um “caminho” que será “chamado” por uma aplicação ou cliente e responderá alguma informação.

Cada rota pode ter uma ou mais funções, e ela deve ser única na API, ao receber uma chamada ela faz todo o processamento necessário para retornar os dados que foi solicitado.

Por exemplo, uma rota na api chamada /produtos, terá funções para retornar uma lista de produtos. O /produtos é o caminho, a identificação dessa rota.

O sistema pode até ter duas rotas chamada /produtos, porém o tipo de solicitação para as duas rotas precisam ser diferentes, por exemplo uma pode ter o tipo GET e a outra o tipo POST.

Caso queira entender um pouco mais sobre rotas e API Rest, este artigo pode ajudar.

Básico de Rotas no Express

Para esta parte é necessário ter uma instalação padrão do Node.js com o Express, caso queira ver como fazer, acesse esse link.

As rotas são constituídas por 4 partes, são elas a instancia do express, o método de requisição (GET, POST, PUT, DELETE) e a função que será executada:

app.METHOD(PATH, HANDLER)

Primeira rota com o Express

Como visto anteriormente, é composta de 4 partes, e uma rota básica, que responde um Hello World, é declarada dessa maneira:

const express = require('express')
const app = express()
const port = 3000
 
app.get('/', function (req, res) {
  res.send('Hello World!');
});
 
app.listen(port, () => {
  console.log(`Exemplo app node rodando no endereço http://localhost:${port}`)
});

Após rodar esse código com o Node, caso você vá até o endereço http://localhost:3000 no navegador, irá mostrar o Hello World na tela.

Métodos de requisição

Um caminho de rota, pode ser igual desde que tenha diferentes métodos de requisição pra ela, e para declarar os diferentes tipos no express, se faz dessa forma:

const express = require('express')
const app = express()
const port = 3000
 
app.get('/user', function (req, res) {
  res.send('Lista de usuários');
});

app.post('/user', function (req, res) {
  res.send('Inserir um usuário');
});

app.put('/user/:id', function (req, res) {
  res.send(`Editar um usuário com o id ${req.params.id}`);
});

app.delete('/user/:id', function (req, res) {
  res.send(`Excluir um usuário com o id ${req.params.id}`);
});
 
app.listen(port, () => {
  console.log(`Exemplo app node rodando no endereço http://localhost:${port}`)
});

Veja que há duas rotas /user, porém uma delas é para listar todos os usuários e a outra é para inserir um usuário.

Outro ponto é que as rotas de editar e excluir também são iguais, o que muda é só o método. Ambas as rotas tem um :id, esse é um parâmetro que precisa ser passado para a rota para que as funções de edição e deleção consigam ser executadas.

Quem for fazer a solicitação, precisa mandar algo como /user/10, isso vai indicar que precisa ser manipulado o registro com id 10, e a função de manipulação consegue acessar esse parâmetro fazendo req.params.id.

Separar as rotas em arquivos

A medida que as rotas de um sistema crescem, é uma boa prática separar essas rotas em arquivos, imagine 100 rotas no mesmo arquivo, dificulta muito a manutenção.

Para fazer isso existe o express.Router, com ele é possível escrever todas as rotas relacionada em um arquivo e depois exportar elas para que seja usado no arquivo principal, com isso as rotas de um módulo ficam separadas.

Crie um projeto do Node e coloque o seguinte código no server.js:

const express = require("express");
const app = express();

app.listen(3000, ()=>{
    console.log('Funciona');
})

Agora crie um arquivo chamado userRoute.js na raiz do projeto, deve ficar mais ou menos assim a estrutura de arquivos:

rotas

O userRoute.js poderia estar dentro de um diretório de rotas também, pode ser organizado de qualquer forma, depois vamos importá-lo para dentro do server.js. Coloque o seguinte código no userRoute.js:

var express = require('express');
var router = express.Router();

router.get('/users', function(req, res) {
    res.send(`Lista todos os usuários`);
});

router.post('/user', function(req, res) {
    res.send(`Inclui um usuário`);
});

router.put('/user/:id', function(req, res) {
    res.send(`Edita o usuário ${req.params.id}`);
});

router.delete('/user/:id', function(req, res) {
    res.send(`Exclui o usuário ${req.params.id}`);
});
module.exports = router;

Nas duas primeiras linhas do arquivo tem o express e o express.Router que será utilizado para montar as rotas nesse arquivo para depois exportar.

Depois tem as rotas que são as mesmas vistas nos exemplos acima, e por fim o module.exports, que exporta todas as rotas definidas. Este exemplo é uma simulação de rotas para uma API de usuários.

Agora devemos voltar no server.js para realizar a importação para que tudo funcione normalmente, para isso, adicione o seguinte código no server.js:

const express = require("express");
const app = express();

var userRoute = require('./userRoute');
app.use('/', userRoute);

app.listen(3000, ()=>{
    console.log('Funciona');
})

Com isso, vá ao terminal no diretório do projeto e digite node server.js. Será mostrado o console.log Funciona e caso acesse pelo navegador o /users, será mostrado a mensagem de lista de usuários:

rotas

Caso utilize o postman ou insomnia para testar as rotas de POST, PUT e DELETE, o resultado será esse:

rotas post
rotas put
rotas delete

Vídeo sobre o assunto

Caso queira, gravei um vídeo explicando todos os passos de como utilizar as rotas no express:

Código fonte

Além do botão, para notificações é muito comum colocar em ícones de sino.

Todo o código fonte dos exemplos mostrados estão no meu CodeSandbox

Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.

Conclusão

Esse assunto é um pouco extenso, abordei um geral e acredito que seja os mais utilizados, porém ainda tem recursos interessantes como middlewares, proteção com token, caminhos com expressões e entre outros assuntos que vale a pena dar uma olhada. Até o próximo post 🙂

Referências

https://expressjs.com/pt-br/guide/routing.html

https://expressjs.com/pt-br/starter/basic-routing.html

http://gabsferreira.com/os-metodos-http-e-a-diferenca-entre-eles/

Este conteúdo te ajudou de alguma forma?