DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on

O Básico: Express - Rotas

Roteamento

O que é?

É o aspecto mais básico de uma API HTTP, onde cada rota representa um endpoint e cada endpoint é responsável por uma ação, além de que cada rota pode tratar de diversos métodos HTTP.

O que faz?

Divide a API em diversos "caminhos" pelo quais podemos percorrer, cada caminho deverá ser responsável por uma parte diferente da aplicação e comunicar ao cliente o status da requisição solicitada, bem como retornar dados (se for o caso).

Acessando rotas

Para acessarmos uma rota de nossa API precisamos respeitar duas condições:

  1. a primeira é acessarmos o endpoint correto
  2. a segunda é utilizarmos o método que definimos para o endpoint.

Sintaxe

Podemos definir rotas de duas formas diferentes, a primeira opção consiste em utilizar métodos HTTP e definir a rota nos parâmetros, já a segunda opção consiste em definirmos uma rota e a partir dela utilizarmos os métodos HTTP.

A segunda opção é conhecida como encadeamento de rotas e é mais recomendada, pois diminui as chances de qualquer erro ortográfico.

// sintaxe básica para definição de rotas

api./*método HTTP*/(/*path*/, (req, res) => {}):
api.get('/', (req, res) => {});
Enter fullscreen mode Exit fullscreen mode
// encadeamento de rotas

api.route(/*path*/)
  ./*método HTTP*/((req, res) => {})
  ./*método HTTP*/((req, res) => {});
api.route('/')
  .get((req, res) => {})
  .post((req, res) => {});
Enter fullscreen mode Exit fullscreen mode

Parâmetros de Rota

O que são?

São opções que podemos passar para as rotas, a fim de torná-las dinâmicas.

O que fazem?

Os parâmetros permitem a criação de rotas dinâmicas, afinal podemos passar diferentes valores para acessarmos conteúdos diferentes. Dessa forma podemos criar um único endpoint para a interação com diversas informações.

Sintaxe

A maneira como definimos parâmetros de rotas no Express é muito similar a maneira como o definimos no React-Router*, tudo que precisamos fazer é utilizar dois pontos : antes do que seria nosso parâmetro.

Uma vez definido, podemos desconstruí-lo do objeto de requisição, respeitando sempre o nome que demos em sua definição. Para isso acessamos a propriedade params da req.

api.get(/*rota*/:/*parâmetro*/, (req, res) => {
  const { /*parâmetro*/ } = req.params;
});

api.get('/recipes/:id', (req, res) => {
  const { id } = req.params;
  const recipe = recipes.find((r) => r.id === Number(id));

  return recipe  // se nenuma receita for achada, recipe vai ser undefined
    ? res.status(200).json(recipe)
    : res.status(404).json({ message: 'Recipe not found!' });
});
Enter fullscreen mode Exit fullscreen mode

Query String

O que são?

São parâmetros que podemos passar para as rotas, sendo que diferente dos parâmetros de rotas, vistos anteriormente, podemos encadear quantas Query Strings quisermos.

O que fazem?

Assim como os parâmetros de rotas, as Query Strings permitem a criação de rotas dinâmicas, porém esse recurso é mais utilizado para pesquisas avançadas, na qual podemos pesquisar pelo termo ou outras características do produto.

Sintaxe

Para definirmos Query Strings em um endpoint utilizamos a sintaxe de chave-valor, iniciando-as com um ponto de interrogação ? e concatenando-as com um E comercial &.

http://localhost:3001/recipes/search?name=panetone&maxPrice=100
Enter fullscreen mode Exit fullscreen mode

Frisando que, diferente dos Parâmetros de Rotas, as Query Strings não são definidas junto do endpoint, mas sim ao acessar determinada rota. Já para conseguirmos ter acesso às Query Strings, tudo que precisamos fazer é desconstruí-las da propriedade query do objeto req.

api.get(/*rota*/, (req, res) => {
  const { /*query*/ } = req.query;
});

api.get('/recipes/search', (req, res) => {
  const { name, maxPrice } = req.query;

  const recipe = recipes.filter((r) => (
    r.name === name && r.maxPrice <= maxPrice
  ));

  return recipe.length > 0  // se nenhuma receita atender os requisitos, o Array terá tamanho 0
    ? res.status(200).json(recipe)
    : res.status(404).json({ message: 'Recipes not found!' });
});
Enter fullscreen mode Exit fullscreen mode

Informação no Body

O que é?

São informações contidas dentro do Body da requisição HTTP, normalmente temos essas informação em requisições do tipo POST, PUT ou PATCH.

O que faz?

Utilizamos o Body para enviar informações sensíveis ao servidor, pois diferente das informações enviadas pelo Header, essas não são visíveis durante a comunicação, sendo possível acessá-las somente no Back-end.

Sintaxe

Para termos acesso a informação contida no Body da requisição precisamos acessar a propriedade body do objeto req, mas não apenas isso, também é necessário "parsear" a informação do body e para isso podemos utilizar o método .json() do próprio Express.

Para garantir que todas as nossas informações provenientes do Body sejam convertidas, executamos o método .json() nos parâmetros do app.use().

api.use(express.json());

api.post(/*rota*/, (req, res) => {
  const { /*informações*/ } = req.body;
});

api.post('/recipes/', (req, res) => {
  const { name, maxPrice } = req.body;
  recipes.push({ name, maxPrice });

  res.status(201).json({ message: 'Recipe created successfully!' });
});
Enter fullscreen mode Exit fullscreen mode

Top comments (0)