Первый сервер на Express

Зачем вообще нужен Express

Node.js умеет создавать HTTP-сервер без библиотек, но для учебы и реальной разработки почти сразу хочется удобства: маршруты, JSON, middleware, обработка ошибок, статические файлы. Express закрывает этот слой и позволяет быстрее перейти от "я запускаю сервер" к "у меня есть понятный API"

В этом уроке сделаем маленький сервер для проекта соло-предпринимателя: главная страница, статус сервиса и endpoint для заявки. Никакой большой архитектуры пока не нужно. Нам важнее увидеть живую связку: URL — функция — ответ

Что получится в конце

У нас будет проект:

first-express-server/
  package.json
  server.js

Сервер будет отвечать на:

  • GET / — текстовая главная страница;
  • GET /api/status — JSON со статусом;
  • POST /api/leads — имитация приема заявки.

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

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

mkdir first-express-server
cd first-express-server
npm init -y

Установите Express:

npm install express

Создайте файл server.js

Самый короткий сервер

Начнем с минимальной версии:

const express = require('express');

const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Express сервер работает');
});

app.listen(port, () => {
  console.log(`Сервер запущен: http://localhost:${port}`);
});

Запуск:

node server.js

Откройте:

http://localhost:3000

Если браузер показывает текст, Express уже работает

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

const express = require('express');

Мы подключаем пакет Express

const app = express();

Создаем приложение. Это объект, на котором будем описывать маршруты

app.get('/', (req, res) => {
  res.send('Express сервер работает');
});

Говорим: если пришел GET-запрос на /, отправь текстовый ответ

app.listen(port, () => {
  console.log(`Сервер запущен: http://localhost:${port}`);
});

Запускаем прослушивание порта. Пока сервер запущен, терминал занят процессом Node.js. Остановить можно через Ctrl + C

Добавляем JSON endpoint

Backend часто нужен не для вывода текста, а для данных. Добавим маршрут:

app.get('/api/status', (req, res) => {
  res.json({
    ok: true,
    service: 'first-express-server',
    time: new Date().toISOString()
  });
});

Полный файл теперь такой:

const express = require('express');

const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Express сервер работает');
});

app.get('/api/status', (req, res) => {
  res.json({
    ok: true,
    service: 'first-express-server',
    time: new Date().toISOString()
  });
});

app.listen(port, () => {
  console.log(`Сервер запущен: http://localhost:${port}`);
});

Перезапустите сервер и откройте:

http://localhost:3000/api/status

Теперь браузер покажет JSON. Это уже похоже на настоящий API

Почему сервер нужно перезапускать

Если вы меняете server.js, запущенный процесс не всегда сам подхватывает изменения. В базовом варианте нужно:

  1. Остановить сервер через Ctrl + C.
  2. Запустить снова:
node server.js

Позже можно поставить nodemon или использовать режим наблюдения, но для первого урока ручной перезапуск даже полезен: становится понятно, что сервер — это живой процесс

Принимаем JSON из POST-запроса

Добавим middleware:

app.use(express.json());

Теперь Express сможет читать JSON-тело запроса. Добавим маршрут:

app.post('/api/leads', (req, res) => {
  const { name, email } = req.body;

  if (!name || !email) {
    return res.status(400).json({
      ok: false,
      message: 'Нужны name и email'
    });
  }

  res.status(201).json({
    ok: true,
    lead: {
      id: Date.now(),
      name,
      email,
      status: 'new'
    }
  });
});

Полный пример:

const express = require('express');

const app = express();
const port = 3000;

app.use(express.json());

app.get('/', (req, res) => {
  res.send('Express сервер работает');
});

app.get('/api/status', (req, res) => {
  res.json({
    ok: true,
    service: 'first-express-server',
    time: new Date().toISOString()
  });
});

app.post('/api/leads', (req, res) => {
  const { name, email } = req.body;

  if (!name || !email) {
    return res.status(400).json({
      ok: false,
      message: 'Нужны name и email'
    });
  }

  res.status(201).json({
    ok: true,
    lead: {
      id: Date.now(),
      name,
      email,
      status: 'new'
    }
  });
});

app.listen(port, () => {
  console.log(`Сервер запущен: http://localhost:${port}`);
});

Как проверить POST-запрос

Через терминал:

curl -X POST http://localhost:3000/api/leads \
  -H "Content-Type: application/json" \
  -d '{"name":"Анна","email":"anna@example.com"}'

Ожидаемый ответ:

{
  "ok": true,
  "lead": {
    "id": 1710000000000,
    "name": "Анна",
    "email": "anna@example.com",
    "status": "new"
  }
}

Если отправить пустой JSON, сервер должен вернуть ошибку 400. Это хорошо: API не молча принимает неполные данные

Добавляем npm-скрипт

{
  "scripts": {
    "start": "node server.js"
  }
}

Теперь:

npm start

Для маленького проекта это не обязательно, но привычка полезная. Потом можно будет заменить команду запуска, не меняя инструкцию для себя и команды

Типичные ошибки

Cannot find module 'express'

Вы не установили Express в этой папке или запускаете файл из другой директории. Выполните:

npm install express

и проверьте pwd или текущую папку в терминале

EADDRINUSE

Порт занят. Поменяйте порт на 3001 или остановите другой процесс

POST-запрос приходит пустым

Проверьте две вещи:

  • в коде есть app.use(express.json());
  • в запросе есть заголовок Content-Type: application/json.

Сервер не обновился после изменения кода

Остановите процесс через Ctrl + C и запустите снова

Как понять, что урок усвоен

Вы не просто скопировали код, если можете ответить:

  • что такое маршрут;
  • чем GET отличается от POST;
  • зачем нужен req;
  • зачем нужен res;
  • почему JSON возвращают через res.json;
  • где меняется порт;
  • почему сервер нужно остановить перед новым запуском.

Ответы на эти вопросы могут быть для вас полезными

Express — это часть Node.js?

Нет. Node.js — среда выполнения, Express — отдельный npm-пакет для создания HTTP-серверов и API

Можно ли сделать сервер без Express?

Да, через встроенный модуль http. Но Express удобнее для учебных и практических веб-задач: маршруты, middleware и ответы пишутся короче

Нужно ли сразу учить Express Generator?

Не обязательно. Для первого понимания лучше один файл server.js. Генератор полезен позже, когда нужна структура проекта

Можно ли использовать Express для реального сайта?

Да. Но для продакшена нужно добавить валидацию, логирование, обработку ошибок, безопасность, переменные окружения и нормальный деплой

Что учить после первого сервера?

Следующий шаг — база данных. Можно пойти в MySQL, если хотите таблицы, или в MongoDB, если удобнее хранить документы

Практическое задание

Добавьте маршрут GET /api/about, который возвращает:

{
  "project": "first-express-server",
  "author": "solo founder",
  "stack": ["Node.js", "Express"]
}

Если получилось, вы уже понимаете основной механизм Express: запрос пришел, маршрут сработал, ответ ушел

Что почитать дальше по Node.js

Если вы собираете тему по шагам, рядом лучше открыть:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x