Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Из чего состоит Express.js
Express.js — это минималистичный, но мощный фреймворк для создания веб-приложений и API на Node.js. Его архитектура базируется на нескольких ключевых компонентах, которые работают вместе для обработки HTTP запросов.
Основные компоненты Express.js
1. Application объект (app)
Это главный объект Express, который создается при инициализации:
const express = require("express");
const app = express();
// app имеет методы для:
// - определения маршрутов
// - подключения middleware
// - конфигурации приложения
Объект app содержит всю логику приложения и настройки.
2. Middleware
Это функции, которые обрабатывают запросы и передают управление дальше через стек обработки:
// Middleware имеет сигнатуру (req, res, next)
app.use((req, res, next) => {
console.log("Request получен");
next(); // передать управление следующему middleware
});
// Встроенные middleware
app.use(express.json()); // парсинг JSON
app.use(express.urlencoded()); // парсинг form data
app.use(express.static("public")); // статические файлы
Middleware выполняются последовательно в порядке регистрации.
3. Router
Это объект для организации маршрутов. Можно создавать отдельные роутеры для разных частей приложения:
const router = express.Router();
// Определение маршрутов в роутере
router.get("/users", (req, res) => {
res.json({ users: [] });
});
router.post("/users", (req, res) => {
res.status(201).json({ id: 1 });
});
// Подключение роутера к приложению
app.use("/api", router); // Результат: GET /api/users
4. Request объект (req)
Объект, который содержит информацию о входящем запросе:
app.get("/users/:id", (req, res) => {
console.log(req.params.id); // параметры маршрута
console.log(req.query.sort); // query параметры
console.log(req.body); // тело запроса (JSON)
console.log(req.headers); // заголовки
console.log(req.method); // HTTP метод
console.log(req.url); // URL
});
5. Response объект (res)
Объект для отправки ответа клиенту:
app.get("/", (req, res) => {
res.status(200); // установить статус
res.json({ message: "Hello" }); // отправить JSON
res.send("text"); // отправить текст
res.redirect("/new-url"); // редирект
res.render("template", {data}); // рендерить шаблон
});
6. Route Handler (Обработчик маршрута)
Это функции, которые обрабатывают запросы к конкретным маршрутам:
// Простой handler
app.get("/", (req, res) => {
res.send("Home page");
});
// Несколько handlers подряд
app.get("/posts/:id",
authenticate, // middleware 1
authorize, // middleware 2
(req, res) => { // основной handler
res.json({ post: "data" });
}
);
7. Error Handler (Обработчик ошибок)
Специальный middleware с 4 параметрами для обработки ошибок:
// ВАЖНО: 4 параметра! (err, req, res, next)
app.use((err, req, res, next) => {
console.error(err);
res.status(500).json({ error: "Internal server error" });
});
// Должен быть последним в стеке middleware
8. Конфигурация приложения
Express позволяет устанавливать различные параметры:
app.set("view engine", "ejs"); // engine для шаблонов
app.set("views", "./views"); // папка с шаблонами
app.set("port", 3000); // порт
app.enable("trust proxy"); // доверять proxy headers
const port = app.get("port");
Архитектурный поток
Запрос в Express проходит через цепочку:
HTTP Request
↓
Global Middleware (express.json, cors, etc)
↓
Route-specific Middleware
↓
Route Handler
↓
Send Response
Типичная структура приложения
const express = require("express");
const app = express();
// Конфигурация
app.use(express.json());
app.use(express.static("public"));
// Роутеры
const userRouter = require("./routes/users");
const postRouter = require("./routes/posts");
app.use("/api/users", userRouter);
app.use("/api/posts", postRouter);
// Error Handler (в конце!)
app.use((err, req, res, next) => {
res.status(500).json({ error: err.message });
});
// Запуск сервера
app.listen(3000, () => {
console.log("Server running on port 3000");
});
Итоги
Express состоит из:
- Application — главный объект приложения
- Middleware — функции для обработки запросов
- Router — организация маршрутов
- Request/Response — объекты для работы с HTTP
- Route Handlers — функции обработки маршрутов
- Error Handler — специальный middleware для ошибок
- Конфигурация — настройки приложения
Все эти компоненты работают вместе в виде middleware stack — цепочки, через которую проходит каждый запрос.