Roteamento no Express com Node.js
Ao lidar com solicitações, o framework Express baseia-se em um sistema de roteamento. Na aplicação, definem-se as rotas e seus respectivos manipuladores. Se a solicitação corresponder a uma determinada rota, o manipulador correspondente é chamado para processar a solicitação.
Para tratar dados em uma rota específica, é possível usar várias funções, como:
use
get
post
put
delete
Como primeiro parâmetro, essas funções podem aceitar um padrão de endereço para o qual a solicitação será processada. O segundo parâmetro das funções é a função que vai processar a solicitação que corresponde ao padrão de endereço. Por exemplo:
const express = require("express");
const app = express();
// Processamento da solicitação no endereço /about
app.get("/about", function (_, response) {
response.send("<h1>Sobre o site</h1>");
});
// Processamento da solicitação no endereço /contact
app.use("/contact", function (_, response) {
response.send("<h1>Contatos</h1>");
});
// Processamento da solicitação na raiz do site
app.get("/", function (_, response) {
response.send("<h1>Página Principal</h1>");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Quando uma solicitação chega, o Express compara o endereço solicitado com cada uma das rotas. Em seguida, seleciona a primeira rota correspondente. Quando a rota coincide, a função manipuladora dela é chamada.
Caracteres Curinga
Os padrões de endereço utilizados podem conter expressões regulares ou caracteres curinga especiais. Em particular, podemos usar símbolos como ?
, +
, *
e ()
.
Por exemplo, o símbolo ?
indica que o caractere anterior pode aparecer uma vez ou estar ausente. Podemos definir a seguinte função:
app.get("/bo?k", function (request, response) {
response.send(request.url);
});
Essa rota corresponderá à string de solicitação /bk
ou /bok
.
O símbolo +
indica que o caractere anterior pode aparecer uma ou mais vezes:
app.get("/bo+k", function (request, response) {
response.send(request.url);
});
Essa rota corresponderá às solicitações /bok
, /book
, /boook
e assim por diante.
O símbolo *
indica que qualquer número de caracteres pode estar no lugar do símbolo:
app.get("/bo*k", function (request, response) {
response.send(request.url);
});
Essa rota corresponderá às solicitações /bork
, /bonk
, /bor.dak
, /bor/ok
e assim por diante.
Os parênteses ()
permitem agrupar caracteres que podem estar presentes na solicitação:
app.get("/book(.html)?", function (request, response) {
response.send(request.url);
});
A expressão (.html)?
indica que a substring .html
pode estar presente ou ausente na string de solicitação. Essa rota corresponderá às solicitações /book
e /book.html
.
Além de definir rotas, podemos usar expressões regulares. Por exemplo, para capturar todas as solicitações a arquivos HTML ou todos os caminhos que terminam com .html
:
app.get(/.*(\.)html$/, function (request, response) {
response.send(request.url);
});