На этой странице

Node.js — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом. Популярный инструмент почти для любых проектов!

Node.js запускает движок V8 — тот самый, что лежит в основе Google Chrome, — вне браузера. Благодаря этому Node.js очень производителен.

Приложение на Node.js работает в одном процессе, не создавая новый поток на каждый запрос. Стандартная библиотека Node.js предоставляет набор асинхронных примитивов ввода-вывода (I/O), которые не дают JavaScript-коду блокироваться. Более того, библиотеки в экосистеме Node.js, как правило, пишутся в неблокирующей парадигме, поэтому блокирующее поведение здесь — скорее исключение, чем норма.

Когда Node.js выполняет операцию ввода-вывода — например, читает данные из сети, обращается к базе данных или файловой системе, — он не блокирует поток и не тратит такты процессора на ожидание, а продолжит работу с операцией, когда придёт ответ.

Это позволяет Node.js обрабатывать тысячи одновременных соединений на одном сервере, не взваливая на разработчика управление конкурентностью потоков — а это частый источник багов.

У Node.js есть уникальное преимущество: миллионы фронтенд-разработчиков, которые пишут JavaScript для браузера, теперь могут писать и серверный код — без необходимости учить совершенно другой язык.

В Node.js можно без проблем использовать новые стандарты ECMAScript: не нужно ждать, пока все пользователи обновят браузеры — вы сами решаете, какую версию ECMAScript использовать, меняя версию Node.js, а также можете включать отдельные экспериментальные возможности, запуская Node.js с флагами.

Самый распространённый пример «Hello World» в Node.js — это веб-сервер:

const { createServer } = require('node:http');

const hostname = '127.0.0.1';
const port = 3000;

const server = createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Чтобы запустить этот сниппет, сохраните его в файл server.js и выполните в терминале node server.js. Если вы используете mjs-версию кода, сохраните её в файл server.mjs и выполните в терминале node server.mjs.

Этот код сначала подключает модуль http из Node.js.

У Node.js великолепная стандартная библиотека, в том числе первоклассная поддержка работы с сетью.

Метод createServer() модуля http создаёт новый HTTP-сервер и возвращает его.

Сервер настроен слушать указанные порт и хост. Когда сервер готов, вызывается функция обратного вызова (callback) — в данном случае она сообщает нам, что сервер запущен.

Каждый раз, когда приходит новый запрос, срабатывает событие request, предоставляющее два объекта: запрос (объект http.IncomingMessage) и ответ (объект http.ServerResponse).

Эти два объекта необходимы для обработки HTTP-вызова.

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

Второй используется, чтобы вернуть данные вызывающей стороне.

В данном случае строкой:

мы устанавливаем свойство statusCode в 200, обозначая успешный ответ.

Устанавливаем заголовок Content-Type:

и закрываем ответ, передавая содержимое аргументом в end():

Если вы ещё этого не сделали, скачайте Node.js.