PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюс
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • AI для кодаНовое
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
    Главная
    Сообщество
    REST API на Node.js и Express с нуля: пошаговое руководство

    REST API на Node.js и Express с нуля: пошаговое руководство

    Аватар автора REST API на Node.js и Express с нуля: пошаговое руководство

    Антон Ларичев

    Иконка календаря02 июня 2026
    Node.jsExpressREST APIBackendjuniorИконка уровня junior
    Картинка поста REST API на Node.js и Express с нуля: пошаговое руководство

    Введение

    REST API — это архитектурный стиль взаимодействия клиента и сервера через HTTP-протокол. Node.js в связке с Express позволяет быстро построить такой API: минимум кода, гибкая маршрутизация и богатая экосистема middleware. В этой статье разберём, как с нуля создать рабочий REST API для управления списком пользователей: настроим проект, реализуем CRUD-операции, подключим валидацию и научимся обрабатывать ошибки.

    Подготовка проекта

    Создадим директорию и инициализируем npm-проект:

    mkdir users-api && cd users-api
    npm init -y
    npm install express
    npm install -D nodemon
    

    В package.json добавим скрипт для запуска в режиме разработки:

    {
      "scripts": {
        "dev": "nodemon index.js",
        "start": "node index.js"
      }
    }
    

    nodemon автоматически перезапускает сервер при изменении файлов — это экономит время на разработку.

    Базовый сервер Express

    Создадим файл index.js с минимальным сервером:

    const express = require('express');
    const app = express();
    const PORT = 3000;
    
    // Подключаем парсер JSON для тела запросов
    app.use(express.json());
    
    app.get('/', (req, res) => {
      res.json({ message: 'API работает' });
    });
    
    app.listen(PORT, () => {
      console.log(`Сервер запущен на порту ${PORT}`);
    });
    

    Запускаем командой npm run dev и проверяем http://localhost:3000 — должны увидеть JSON-ответ. express.json() — встроенный middleware, который парсит тело запроса в формате JSON и кладёт результат в req.body.

    Реализация CRUD-операций

    REST подразумевает использование HTTP-методов для разных действий: GET — получение, POST — создание, PUT — обновление, DELETE — удаление. Реализуем ресурс users с временным хранилищем в памяти.

    // Временное хранилище данных
    let users = [
      { id: 1, name: 'Анна', email: 'anna@mail.ru' },
      { id: 2, name: 'Иван', email: 'ivan@mail.ru' }
    ];
    let nextId = 3;
    
    // Получение списка пользователей
    app.get('/users', (req, res) => {
      res.json(users);
    });
    
    // Получение одного пользователя
    app.get('/users/:id', (req, res) => {
      const id = Number(req.params.id);
      const user = users.find(u => u.id === id);
      if (!user) {
        return res.status(404).json({ error: 'Пользователь не найден' });
      }
      res.json(user);
    });
    
    // Создание нового пользователя
    app.post('/users', (req, res) => {
      const { name, email } = req.body;
      if (!name || !email) {
        return res.status(400).json({ error: 'name и email обязательны' });
      }
      const user = { id: nextId++, name, email };
      users.push(user);
      res.status(201).json(user);
    });
    
    // Обновление пользователя
    app.put('/users/:id', (req, res) => {
      const id = Number(req.params.id);
      const user = users.find(u => u.id === id);
      if (!user) {
        return res.status(404).json({ error: 'Пользователь не найден' });
      }
      Object.assign(user, req.body);
      res.json(user);
    });
    
    // Удаление пользователя
    app.delete('/users/:id', (req, res) => {
      const id = Number(req.params.id);
      users = users.filter(u => u.id !== id);
      res.status(204).send();
    });
    

    Обратите внимание на коды состояния: 200 — успех, 201 — создан ресурс, 204 — успех без тела ответа, 400 — ошибка клиента, 404 — не найдено. Корректное использование статусов — обязательная часть REST.

    Middleware и обработка ошибок

    Middleware — это функция, которая выполняется между запросом и ответом. С её помощью удобно реализовать логирование, авторизацию и централизованную обработку ошибок.

    // Логирование всех запросов
    app.use((req, res, next) => {
      console.log(`${req.method} ${req.url}`);
      next();
    });
    
    // Глобальный обработчик ошибок
    app.use((err, req, res, next) => {
      console.error(err.stack);
      res.status(500).json({ error: 'Внутренняя ошибка сервера' });
    });
    

    Обработчик ошибок должен иметь четыре аргумента — Express определяет его по сигнатуре. Размещать его нужно после всех маршрутов.

    Вынесение маршрутов в роутер

    Когда эндпоинтов становится много, полезно разделить код на модули с помощью express.Router:

    // routes/users.js
    const router = require('express').Router();
    
    router.get('/', (req, res) => res.json(users));
    router.post('/', (req, res) => { /* логика */ });
    
    module.exports = router;
    
    // index.js
    const usersRouter = require('./routes/users');
    app.use('/users', usersRouter);
    

    Такая структура упрощает поддержку и масштабирование проекта.

    Частые ошибки

    Забытый express.json(). Без этого middleware req.body будет undefined, и POST-запросы перестанут работать. Подключайте его в самом начале до объявления маршрутов.

    Отсутствие валидации входных данных. Доверять данным клиента нельзя — используйте библиотеки joi, zod или express-validator для проверки типов и обязательных полей.

    Игнорирование асинхронных ошибок. Если внутри обработчика возникает ошибка в async-функции, Express её не поймает автоматически. Оборачивайте логику в try/catch или используйте express-async-errors.

    Неправильные HTTP-статусы. Возвращать 200 для ошибок — антипаттерн. Клиент должен по статусу понимать, что произошло.

    Хранение данных в памяти. Это допустимо только для прототипа. В реальном приложении нужна БД: PostgreSQL, MongoDB или хотя бы SQLite.

    Заключение

    Мы построили рабочий REST API на Node.js и Express: настроили проект, реализовали CRUD-операции, добавили middleware для логирования и обработки ошибок, вынесли маршруты в отдельный модуль. Следующие шаги — подключение базы данных через ORM (Prisma, TypeORM), добавление аутентификации через JWT, написание тестов с помощью Jest и Supertest, а также деплой на сервер. Express остаётся одним из самых популярных фреймворков для бэкенда на Node.js именно благодаря простоте и гибкости, которую вы только что увидели на практике.

    Иконка глаза493

    Комментарии

    0

    Постройте личный план изучения Основы Git до уровня Middle — бесплатно!

    Основы Git — часть карты развития Frontend, Backend, DevOps

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    HTML и CSS

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    CSS Flexbox

    Антон Ларичев
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.9
    бесплатно
    Подробнее
    изображение курса

    Основы JavaScript

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Как установить Node.js на Windows: пошаговая инструкция
    Иконка аватараАнтон
    Иконка календаря17 июля 2026
    Node.jsWindowsnpm+ 2juniorИконка уровня junior

    Как установить Node.js на Windows: пошаговая инструкция

    Как установить Node.js на Windows — пошаговая инструкция через официальный установщик и nvm-windows с разбором частых ошибок.

    Иконка чипа0
    Иконка глаза17
    Иконка комментариев0
    Картинка поста CI/CD с GitHub Actions: автоматизация деплоя для начинающих
    Иконка аватараАнтон
    Иконка календаря03 июля 2026
    CI/CDGitHub ActionsDevOps+ 2juniorИконка уровня junior

    CI/CD с GitHub Actions: автоматизация деплоя для начинающих

    CI/CD с GitHub Actions: пошаговая настройка pipeline для автоматического тестирования и деплоя Node.js-приложений без сторонних сервисов.

    Иконка чипа0
    Иконка глаза161
    Иконка комментариев0
    Картинка поста JWT токены: структура, работа и аутентификация в Node.js
    Иконка аватараАнтон
    Иконка календаря01 июля 2026
    JWTаутентификацияNode.js+ 2juniorИконка уровня junior

    JWT токены: структура, работа и аутентификация в Node.js

    JWT токены — стандарт для безопасной передачи данных между клиентом и сервером. Разбираем структуру, реализацию и частые ошибки.

    Иконка чипа0
    Иконка глаза183
    Иконка комментариев0
    Иконка чипа0