Router позволяет определить дочерние подмаршруты со своими обработчиками относительно некоторого главного маршрута. Например, определим следующее приложение:
const express = require("express");
const app = express();
app.use("/about", function (_, response) {
response.send("О сайте");
});
app.use("/products/create",function (request, response) {
response.send("Добавление товара");
});
app.use("/products/:id",function (request, response) {
response.send(`Товар ${request.params.id}`);
});
app.use("/products/",function (request, response) {
response.send("Список товаров");
});
app.use("/", function (request, response) {
response.send("Главная страница");
});
app.listen(3000);
Здесь у нас есть пять маршрутов, которые обрабатываются различными обработчиками. Но три из этих маршрутов начинаются с "/products" и условно относятся к некоторому функционалу по работе с товарами (просмотр списка товаров, просмотр одного товара по id и добавление товара). Объект Router позволяет связать подобный функционал в одно целое и упростить управление им. Например, перепишем предыдущий пример с использованием объекта Router:
const express = require("express");
const app = express();
// определяем Router
const productRouter = express.Router();
// определяем маршруты и их обработчики внутри роутера
productRouter.use("/create", function(request, response){
response.send("Добавление товара");
});
productRouter.use("/:id", function(request, response){
response.send(`Товар ${request.params.id}`);
});
productRouter.use("/", function(request, response){
response.send("Список товаров");
});
// сопоставляем роутер с конечной точкой "/products"
app.use("/products", productRouter);
app.use("/about", function (request, response) {
response.send("О сайте");
});
app.use("/", function (request, response) {
response.send("Главная страница");
});
app.listen(3000);
Здесь определен объект productRouter, который обрабатывает все запросы по маршруту "/products". Это главный маршрут. Однако в рамках этого маршрута может быть подмаршрут "/" со своим обработчиком, а также подмаршруты "/:id" и "/create", которые также имеют свои обработчики.