Roteamento no Express - 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 ?
+
*
()
Por exemplo, o símbolo ?
app.get("/bo?k", function(request, response) {
response.send(request.url);
});
Essa rota corresponderá à string de solicitação /bk
/bok
O símbolo +
app.get("/bo+k", function(request, response) {
response.send(request.url);
});
Essa rota corresponderá às solicitações /bok
/book
/boook
O 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
Os parênteses ()
app.get("/book(.html)?", function(request, response) {
response.send(request.url);
});
A expressão (.html)?
.html
/book
/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);
});