Создание Node.js сервера: пошаговое руководство для разработчика
Если вы JavaScript-разработчик, стремящийся выйти за пределы браузера и создать что-то самостоятельное, то создание сервера на Node.js — это ваш естественный и мощный следующий шаг. Node.js позволяет использовать знакомый язык для построения быстрых и масштабируемых сетевых приложений. Это руководство проведет вас через весь процесс от чистого листа до работающего сервера, который может обрабатывать запросы и отправлять ответы.
Прежде всего, вам необходимо убедиться, что Node.js установлен на вашем компьютере. Откройте терминал или командную строку и выполните команду node -v. Если вы увидите номер версии, например v18.x.x, значит, всё готово. Если же команда не распознана, зайдите на официальный сайт nodejs.org и скачайте стабильную LTS-версию. Установка интуитивно понятна и аналогична установке любой другой программы.
После успешной установки создайте новую директорию для вашего проекта. Вы можете сделать это через файловый менеджер или командой mkdir my-first-server в терминале. Перейдите в эту папку с помощью cd my-first-server. Теперь самое время инициализировать проект. Запустите команду npm init -y. Эта команда создаст файл package.json — сердце вашего Node.js проекта, который будет хранить информацию о проекте и его зависимостях.
Теперь откройте вашу папку в любом текстовом редакторе или IDE, например, в VS Code. Создайте новый файл с именем server.js. Именно в этом файле мы будем писать весь наш серверный код. Начнем с самого базового модуля Node.js — модуля http. Он предоставляет все необходимые инструменты для создания HTTP-сервера.
В первой строке файла server.js нам нужно импортировать этот модуль. Для этого используем встроенную в Node.js функцию require. const http = require('http'); Теперь создадим сам сервер с помощью метода createServer, который предоставляет модуль http. const server = http.createServer((req, res) => { // Здесь будет логика обработки запроса }); Метод createServer принимает функцию обратного вызова (callback), которая будет выполняться каждый раз, когда на сервер поступает новый запрос. Эта функция получает два важнейших объекта: req (request — запрос) и res (response — ответ). Через req мы получаем информацию о том, что запросил клиент (URL, метод GET/POST, заголовки). Через res мы формируем и отправляем ответ обратно клиенту.
Для начала сделаем простейший ответ. Внутри функции callback добавим следующие строки: res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' }); res.end('Привет! Ваш первый Node.js сервер работает!'); Метод writeHead устанавливает статус код ответа (200 означает "ОК") и заголовки ответа. В данном случае мы говорим браузеру, что отправляем простой текст в кодировке UTF-8. Метод end завершает формирование ответа и отправляет его клиенту вместе с переданной строкой в качестве тела ответа.
Сервер создан, но он пока не запущен и не слушает входящие соединения. Для этого у объекта server есть метод listen. const PORT = 3000; server.listen(PORT, () => { console.log(`Сервер запущен на порту ${PORT}. Откройте браузер по адресу http://localhost:${PORT}`); }); Мы указываем порт (например, 3000) и функцию, которая выполняется сразу после успешного старта сервера — она выводит сообщение в консоль для нашего удобства.
Ваш первый сервер готов! Вернитесь в терминал, убедитесь что находитесь в папке проекта и выполните команду node server.js. Вы должны увидеть сообщение "Сервер запущен на порту 3000". Теперь откройте ваш браузер и перейдите по адресу http://localhost:3000. На экране появится надпись "Привет! Ваш первый Node.js сервер работает!". Поздравляем!
Однако такой сервер отвечает одним и тем же текстом на любой запрос — будь то главная страница или путь /about. Давайте добавим простую маршрутизацию на основе URL из объекта запроса req.url. Заменим содержимое функции createServer на более осмысленное: if (req.url === '/' && req.method === 'GET') { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end('<h1>Главная страница</h1><p>Добро пожаловать!</p>'); } else if (req.url === '/about') { res.writeHead(200); res.end('Страница "О нас"'); } else { res.writeHead(404); res.end('Страница не найдена'); } Теперь наш сервер различает запросы к корню сайта (/), к странице /about и возвращает ошибку 404 для всех остальных путей. Обратите внимание: мы также начали проверять метод запроса req.method — это хорошая практика.
Работать напрямую с модулем http хорошо для понимания основ, но для создания полноценных приложений чаще используют фреймворки, которые упрощают маршрутизацию, работу с промежуточным ПО (middleware) и многое другое. Самый популярный из них — Express.js. Давайте мгновенно улучшим наш проект с его помощью.
Сначала остановите сервер сочетанием клавиш Ctrl+C в терминале. Затем установите Express с помощью менеджера пакетов npm: npm install express После установки создайте новый файл app.js или перепишите server.js. Импортируйте Express: const express = require('express'); const app = express(); Теперь настроим те же маршруты, но уже с использованием синтаксиса Express: app.get('/', (req, res) => { res.send('<h1>Главная страница на Express</h1>'); }); app.get('/about', (req, res) => { res.send('О нас на Express'); }); // Обработка несуществующих маршрутов app.use((req, res) => { res.status(404).send('Страница не найдена'); }); Запуск сервера становится еще проще: const PORT = 3000; app.listen(PORT, () => console.log(`Сервер Express работает на порту ${PORT}`)); Express автоматически устанавливает заголовки Content-Type по умолчанию, предоставляет удобные методы send status sendFile json и открывает доступ к огромной экосистеме middleware.
Для реального проекта вам также понадобится организовать структуру папок, подключить базу данных (например MongoDB с Mongoose или PostgreSQL), реализовать аутентификацию пользователей и настроить переменные окружения для хранения чувствительных данных вроде паролей к БД или секретных ключей API. Переменные окружения легко управляются через пакет dotenv.
- Heroku (простой старт)
- Vercel или Netlify (отлично подходят также для фронтенда)
- DigitalOcean или AWS EC2 (полный контроль над виртуальным сервером)
Таким образом путь от простого скрипта до полноценного бэкенд-приложения оказывается вполне последовательным и доступным каждому кто владеет основами JavaScript
Создание сервера на Node.js открывает перед разработчиком мир полноценной веб-разработки превращая его из создателя интерфейсов в архитектора целых приложений Начиная с базового HTTP-модуля вы закладываете фундамент понимания а переходя на Express значительно ускоряете разработку не жертвуя гибкостью Главное помнить что даже самый сложный проект начинается с одного работающего файла который отвечает Hello World
Чтобы оставить комментарий, войдите по одноразовому коду
Войти