1. Почему так важна настройка порта и хоста?
В программировании, как и в жизни, важно не только сделать что-то, но и понять, где это работает. Сервер должен "слушать" на определённом порту и, возможно, на определённом сетевом интерфейсе (хосте). Если не указать эти параметры правильно, сервер либо не будет доступен извне, либо может конфликтовать с другими программами.
Аналогия
Представьте, что у вас есть кафе (сервер), и вы хотите принимать гостей. Порт — это номер двери в вашем кафе, а хост — это адрес здания. Если вы не скажете друзьям, где и по какому адресу вас искать, они будут долго бродить по городу, а вы — сидеть в пустом кафе. Вот почему нужно указывать порт и хост явно!
Что такое порт и хост?
- Порт — это число от 0 до 65535, которое определяет "дверь" для входящих соединений на вашем компьютере.
Например, 80 — стандартный порт для HTTP, 443 — для HTTPS, 3000, 8080, 5000 — популярные порты для разработки. - Хост (или hostname, или адрес) — это сетевой адрес, на котором сервер будет слушать соединения.
Самые частые варианты:- 'localhost' или '127.0.0.1' — только для вашего компьютера (другие не зайдут).
- '0.0.0.0' — слушать на всех сетевых интерфейсах (и снаружи, и изнутри).
- Любой другой IP-адрес, если хотите слушать только на одном интерфейсе.
2. Как указать порт и хост при запуске сервера
Базовый пример
const http = require('http');
const server = http.createServer((req, res) => {
res.end('Hello, world!');
});
const PORT = 3000;
const HOST = 'localhost';
server.listen(PORT, HOST, () => {
console.log(`Сервер запущен на http://${HOST}:${PORT}`);
});
- server.listen(port, host, callback) — основной способ "запустить" сервер.
- Если не указать host, по умолчанию будет использоваться '0.0.0.0' (доступен снаружи).
- Callback-функция сработает, когда сервер успешно стартует.
Только порт (без хоста)
Можно указать только порт:
server.listen(3000, () => {
console.log('Сервер слушает на порту 3000');
});
В этом случае сервер будет доступен по всем IP-адресам компьютера.
3. Как выбрать порт: лайфхаки и типичные грабли
- Порты 0–1023 — "зарезервированы" для системных сервисов (например, 80 — HTTP, 22 — SSH). Для разработки лучше брать порты выше 1024.
- Порты 3000, 8080, 5000 — де-факто стандарт для разработки веб-приложений.
- Если порт уже занят другой программой, сервер не запустится — появится ошибка EADDRINUSE.
Как узнать, что порт занят?
Если при запуске видите ошибку вида:
Error: listen EADDRINUSE: address already in use 127.0.0.1:3000
Это значит, что кто-то уже слушает этот порт. Нужно либо остановить тот процесс, либо выбрать другой порт.
4. Поддержка переменных окружения
В реальных проектах порт и хост часто задаются через переменные окружения — чтобы не менять код при деплое на сервер или в облако.
const PORT = process.env.PORT || 3000;
const HOST = process.env.HOST || 'localhost';
server.listen(PORT, HOST, () => {
console.log(`Сервер запущен на http://${HOST}:${PORT}`);
});
- process.env.PORT — значение переменной окружения PORT (задаётся при запуске или в настройках хостинга).
- || 3000 — если переменная не задана, использовать 3000.
Как задать переменную окружения
В командной строке (Linux/Mac):
PORT=4000 node server.js
В Windows (PowerShell):
$env:PORT=4000; node server.js
5. Полезные нюансы
Как понять, что сервер запустился правильно?
Если всё хорошо, вы увидите сообщение из колбэка listen:
Сервер запущен на http://localhost:3000
Теперь можно открыть браузер и перейти по этому адресу. Если увидите "Hello, world!" — поздравляю, сервер работает!
Если сервер не стартует, проверьте:
- Не занят ли порт?
- Нет ли ошибок в коде?
- Доступен ли этот порт в вашей сети (например, брандмауэр не блокирует)?
Особенности запуска на 'localhost', '0.0.0.0' и других адресах
- Если указать 'localhost' — сервер будет доступен только с этого компьютера.
Попробуйте зайти с другого устройства — не получится. - Если указать '0.0.0.0' — сервер будет слушать на всех IP, и вы сможете зайти с другого устройства в вашей сети (например, по адресу вашего компьютера: http://192.168.1.42:3000).
- Если хотите, чтобы сервер был доступен из интернета (например, на VPS), обычно указывают '0.0.0.0' и открывают нужный порт в настройках брандмауэра.
Пример
server.listen(3000, '0.0.0.0', () => {
console.log('Сервер слушает на всех интерфейсах!');
});
6. Пример: мини-приложение с настройкой порта и хоста
Давайте доработаем наш учебный сервер, чтобы он принимал порт и хост из переменных окружения, а при запуске показывал, по какому адресу его искать.
// server.js
const http = require('http');
const PORT = process.env.PORT || 3000;
const HOST = process.env.HOST || 'localhost';
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end('Привет! Это мой Node.js сервер 🚀');
});
server.listen(PORT, HOST, () => {
console.log(`Сервер запущен на http://${HOST}:${PORT}`);
});
Как запускать
Обычный запуск:
node server.js
Откроется на http://localhost:3000
Задать свой порт:
PORT=5000 node server.js
Откроется на http://localhost:5000
7. Типичные ошибки при настройке сервера
Ошибка №1: порт занят другим процессом
Самая частая беда: запускаете сервер, а там уже кто-то сидит (например, другой сервер, или вы забыли остановить прошлый запуск).
Решение: сменить порт или завершить лишний процесс.
Ошибка №2: забыли указать правильный хост
Если указать 'localhost', а потом пытаться зайти с другого компьютера — не получится. Для тестирования на разных устройствах используйте '0.0.0.0'.
Ошибка №3: забыли обработать ошибку при запуске
Если не добавить обработчик ошибок, программа просто упадёт.
Лучше добавить:
server.on('error', (err) => {
console.error('Ошибка при запуске сервера:', err.message);
});
Ошибка №4: неправильный синтаксис listen
Путают порядок аргументов: сначала порт, потом хост!
server.listen(port, host, callback)
Ошибка №5: не обновили переменные окружения
Если задали PORT=4000, а в браузере заходите на 3000 — не удивляйтесь, что не работает.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ