Express.js для JavaScript (Node.js): полное руководство с примерами

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое 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 работает!".

Что здесь происходит?

  1. require('express') — импортируем библиотеку Express.
  2. express() — создаем экземпляр приложения Express.
  3. app.get('/', callback) — определяем обработчик для GET-запроса на корневой URL (/).
  4. res.send() — отправляем ответ клиенту.
  5. 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-

Рекомендаций