Что такое Express.js и зачем он нужен?
Express.js — это минималистичный и гибкий веб-фреймворк для Node.js, написанный на JavaScript. Он предоставляет разработчикам мощный набор инструментов для создания веб-приложений и API (REST, GraphQL). Express.js является стандартом де-факто для серверной разработки на Node.js благодаря своей простоте, скорости и огромному сообществу.
Зачем нужен Express.js? Node.js сам по себе предоставляет низкоуровневый HTTP-модуль, который позволяет создавать серверы. Однако работа с ним напрямую требует написания большого количества шаблонного кода для обработки маршрутов, парсинга запросов, управления сессиями и т.д. Express.js решает эти проблемы, предоставляя:
- Маршрутизацию (Routing): Простое определение обработчиков для различных URL и HTTP-методов (GET, POST, PUT, DELETE).
- Middleware (Промежуточное ПО): Мощная система, позволяющая выполнять код до или после обработки запроса (например, для логирования, аутентификации, сжатия).
- Управление запросами и ответами: Удобные методы для работы с параметрами URL, телом запроса (body), куки, заголовками и отправкой ответов (JSON, HTML, файлы).
- Шаблонизацию: Интеграцию с популярными шаблонизаторами, такими как Pug, EJS, Handlebars.
- Статические файлы: Простую раздачу статических ресурсов (CSS, JS, изображения).
Express.js используется для создания всего: от простых одностраничных приложений до сложных корпоративных систем и высоконагруженных API.
Установка Express.js
Установка Express.js производится через менеджер пакетов npm (Node Package Manager). Предполагается, что у вас уже установлен Node.js и npm.
Шаг 1: Инициализация проекта
Создайте новую директорию для вашего проекта и перейдите в нее в терминале. Затем инициализируйте новый проект Node.js:
mkdir my-express-app
cd my-express-app
npm init -y
Флаг -y автоматически принимает все значения по умолчанию. Вы также можете опустить его, чтобы вручную заполнить метаданные проекта.
Шаг 2: Установка Express
Установите Express.js как зависимость проекта:
npm install express
Эта команда добавит Express в файл package.json в раздел dependencies и создаст папку node_modules с самой библиотекой и ее зависимостями.
Шаг 3: Проверка установки
После установки вы можете проверить версию Express в вашем проекте:
npx express --version
Или просто посмотреть в файл package.json.
Быстрый старт: "Hello World" на Express.js
Создайте файл app.js (или index.js) в корне вашего проекта и добавьте следующий код:
// app.js
const express = require('express');
const app = express();
const port = 3000;
// Определяем маршрут для корневого URL
app.get('/', (req, res) => {
res.send('Hello World! Express.js работает!');
});
// Запускаем сервер
app.listen(port, () => {
console.log(`Сервер запущен на http://localhost:${port}`);
});
Запуск приложения:
В терминале выполните команду:
node app.js
Откройте браузер и перейдите по адресу http://localhost:3000. Вы должны увидеть сообщение "Hello World! Express.js работает!".
Что здесь происходит?
require('express')— импортируем библиотеку Express.express()— создаем экземпляр приложения Express.app.get('/', callback)— определяем обработчик для GET-запроса на корневой URL (/).res.send()— отправляем ответ клиенту.app.listen(port, callback)— запускаем сервер на указанном порту.
Основные методы и функции Express.js
Рассмотрим 10 ключевых методов и функций, которые составляют основу работы с Express.js.
1. express() — Создание приложения
Что делает: Это корневая функция, которая создает новый экземпляр приложения Express. Все остальные методы вызываются на этом объекте.
Параметры: Не принимает обязательных параметров.
Пример:
const express = require('express');
const app = express(); // app - это наше приложение
2. app.get(path, callback) — Обработка GET-запросов
Что делает: Определяет маршрут для HTTP GET-запросов. Когда клиент отправляет GET-запрос на указанный path, выполняется функция callback.
Параметры:
path(String/RegExp): Путь маршрута (например,'/','/users','/users/:id').callback(Function): Функция-обработчик, которая получает объектыreq(запрос) иres(ответ).
Пример:
app.get('/users/:id', (req, res) => {
const userId = req.params.id;
res.send(`Вы запросили пользователя с ID: ${userId}`);
});
3. app.post(path, callback) — Обработка POST-запросов
Что делает: Определяет маршрут для HTTP POST-запросов. Обычно используется для отправки данных на сервер (например, при создании новой записи).
Параметры: Аналогичны app.get().
Пример:
// Для парсинга тела запроса (JSON) необходимо добавить middleware
app.use(express.json());
app.post('/users', (req, res) => {
const newUser = req.body; // Данные из тела запроса
console.log('Новый пользователь:', newUser);
res.status(201).json({ message: 'Пользователь создан', user: newUser });
});
4. app.put(path, callback) — Обработка PUT-запросов
Что делает: Определяет маршрут для HTTP PUT-запросов. Используется для полного обновления существующего ресурса.
Параметры: Аналогичны app.get().
Пример:
app.put('/users/:id', (req, res) => {
const userId = req.params.id;
const updatedData = req.body;
res.json({ message: `Пользователь ${userId} обновлен`, data: updatedData });
});
5. app.delete(path, callback) — Обработка DELETE-запросов
Что делает: Определяет маршрут для HTTP DELETE-запросов. Используется для удаления ресурса.
Параметры: Аналогичны app.get().
Пример:
app.delete('/users/:id', (req, res) => {
const userId = req.params.id;
// Логика удаления пользователя из БД
res.json({ message: `Пользователь ${userId} удален` });
});
6. app.use([path,] callback) — Middleware (Промежуточное ПО)
Что делает: Это самый мощный метод Express. Он позволяет зарегистрировать функцию middleware, которая будет выполняться для каждого запроса (или для запросов, соответствующих определенному пути). Middleware может изменять объекты req и res, завершать цикл запрос-ответ или вызывать следующую функцию middleware (next()).
Параметры:
path(String, необязательный): Путь, для которого применяется middleware.callback(Function): Функция, которая принимает три аргумента:req,res,next.
Пример (логгер):
// Middleware для логирования всех запросов
app.use((req, res, next) => {
console.log(`${req.method} ${req.url} - ${new Date().toISOString()}`);
next(); // Передаем управление следующему middleware или маршруту
});
// Middleware для парсинга JSON-тела запроса (встроенный)
app.use(express.json());
7. req.params — Параметры маршрута
Что делает: Это свойство объекта запроса (req), которое содержит параметры, извлеченные из URL-маршрута. Параметры определяются в пути с помощью двоеточия (:paramName).
Параметры: Не метод, а свойство. Возвращает объект.
Пример:
// Маршрут: /users/:userId/books/:bookId
app.get('/users/:userId/books/:bookId', (req, res) => {
console.log(req.params); // { userId: '123', bookId: '456' }
res.send(`User ID: ${req.params.userId}, Book ID: ${req.params.bookId}`);
});
8. req.query — Параметры строки запроса (Query String)
Что делает: Свойство объекта запроса, которое содержит параметры, переданные в URL после знака вопроса (?key=value).
Параметры: Не метод, а свойство. Возвращает объект.
Пример:
// URL: /search?q=express&page=2
app.get('/search', (req, res) => {
const searchQuery = req.query.q; // 'express'
const page = req.query.page; // '2' (всегда строка)
res.send(`Поиск: "${searchQuery}", страница: ${page}`);
});
9. res.json([body]) — Отправка JSON-ответа
Что делает: Отправляет ответ клиенту в формате JSON. Метод автоматически устанавливает заголовок Content-Type: application/json и преобразует переданный объект или массив в JSON-строку с помощью JSON.stringify().
Параметры:
body(Object/Array/String/Number): Данные, которые нужно отправить.
Пример:
app.get('/api/data', (req, res) => {
const data = {
id: 1,
name: 'Express.js',
type: 'Framework'
};
res.json(data);
});
10. res.status(code) — Установка HTTP-статуса ответа
Что делает: Устанавливает HTTP-статус код для ответа. Этот метод является цепным (chainable), то есть его можно комбинировать с другими методами ответа, такими как .json() или .send().
Параметры:
code(Number): HTTP-
Также в библиотеке
PDF генерация в Swift: создание документов для iOS и macOS
Обработка JSON в Go (Golang): encoding/json и альтернативы
Парсинг HTML в TypeScript: библиотеки, инструменты и примеры
Reactive Programming in JavaScript (Node.js): RxJS & Observables
Интернационализация (i18n) в C++: полное руководство с gettext и ICU