Маршрутизация в 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→ список пользователей в JSONGET /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 - мы так-же затронем тему маршрутизации, и не смотря на то что это будет выполняться на стороне клиента - логика останется той же.