Маршрутизация в NodeJS

Маршрутизация — это сопоставление URL-путей с соответствующими обработчиками. Каждый запрос приходит с определённым путём (например, /, /about, /api/users) — сервер должен понять, какой код запустить для каждого из них.

Простая маршрутизация через req.url и if/switch

Встроенного роутера в NodeJS нет — его нужно писать вручную. Для этого используется свойство req.url, содержащее путь запроса.

Пример:

const http = require('http');

const server = http.createServer((req, res) => {
  const path = req.url;

  if (path === '/') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>Главная страница</h1>');
  } else if (path === '/about') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<h1>О нас</h1>');
  } else if (path === '/api/users') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify([{ id: 1, name: 'Анна' }]));
  } else {
    res.writeHead(404, { 'Content-Type': 'text/html' });
    res.end('<h1>404 Not Found</h1>');
  }
});

server.listen(3000);

Запросы:

  • GET / → главная страница
  • GET /about → страница "О нас"
  • GET /api/users → список пользователей в JSON
  • GET /anything-else → 404

Плюсы ручной маршрутизации

  • Нет зависимостей — работает на чистом NodeJS
  • Прозрачно: видно, что происходит под капотом
  • Подходит для обучения и простых серверов
  • Полный контроль над логикой

Минусы ручной маршрутизации

  • С ростом количества маршрутов код становится громоздким
  • Нет поддержки параметров: /user/123, /post/:id — нужно писать регулярки или split('/')
  • Нет методов (GET/POST): нужно проверять req.method отдельно
  • Нет валидации, обработки ошибок, middleware
  • Сложно масштабировать — не подходит для реальных проектов

Автоматическая маршрутизация:

В реальных проектах маршрутизацию не пишут вручную. Используют фреймворки, например Express.js, где всё выглядит так:

app.get('/', (req, res) => res.send('Главная'));
app.get('/about', (req, res) => res.send('О нас'));
app.get('/api/users', (req, res) => res.json(users));
app.post('/api/users', (req, res) => { /* создать пользователя */ });

Но важно понимать: Express просто упрощает то, что вы уже умеете делать через http.
Понимание базовой логики (req.url, req.method, res.end) — фундамент. Без него фреймворки — чёрный ящик.

Маршрутизация — это не про библиотеки. Это про то, как сервер решает: «Что делать, когда пришёл запрос по этому пути?» — и это вы должны уметь делать вручную. Когда мы начнем изучать React - мы так-же затронем тему маршрутизации, и не смотря на то что это будет выполняться на стороне клиента - логика останется той же.