Router no Express com Node.js
O Router
permite definir sub-rotas com seus próprios manipuladores em relação a uma rota principal. Por exemplo, vamos definir a seguinte aplicação:
const express = require("express");
const app = express();
app.use("/about", function (_, response) {
response.send("Sobre o site");
});
app.use("/products/create", function (request, response) {
response.send("Adicionando produto");
});
app.use("/products/:id", function (request, response) {
response.send(`Produto ${request.params.id}`);
});
app.use("/products/", function (request, response) {
response.send("Lista de produtos");
});
app.use("/", function (request, response) {
response.send("Página principal");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Aqui temos cinco rotas que são tratadas por diferentes manipuladores. No entanto, três dessas rotas começam com /products
e estão relacionadas a funcionalidades de manipulação de produtos (visualização da lista de produtos, visualização de um produto específico por id e adição de produto). O objeto Router
permite agrupar essa funcionalidade em um único conjunto, facilitando sua gestão. Vamos reescrever o exemplo anterior utilizando o objeto Router
:
const express = require("express");
const app = express();
// definindo o Router
const productRouter = express.Router();
// definindo rotas e seus manipuladores dentro do router
productRouter.use("/create", function (request, response) {
response.send("Adicionando produto");
});
productRouter.use("/:id", function (request, response) {
response.send(`Produto ${request.params.id}`);
});
productRouter.use("/", function (request, response) {
response.send("Lista de produtos");
});
// associando o router ao endpoint "/products"
app.use("/products", productRouter);
app.use("/about", function (request, response) {
response.send("Sobre o site");
});
app.use("/", function (request, response) {
response.send("Página principal");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Aqui, definimos um objeto productRouter
que trata todas as requisições para a rota /products
. Esta é a rota principal. No entanto, dentro desta rota principal, há sub-rotas /
com seu próprio manipulador, assim como as sub-rotas /:id
e /create
, que também têm seus próprios manipuladores.