Node или Node.js (читается: ноуд или ноуд-джей-эс) — программная платформа, основанная на движке V8 (компилирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-вывода через свой API, написанный на C++, подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS) и даже программировать микроконтроллеры (например, tessel, low.js и Espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.

История В 1996 году в компании Netscape были попытки создания серверного JavaScript (Server-side JavaScript — SSJS), однако технология не получила распространения.

Node.js разработал Райан Даль в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно-ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».

Разработка Node.js спонсируется компанией Joyent.

В декабре 2014 года был создан форк io.js.

В мае 2015 года было принято решение о слиянии io.js и Node.js и дальнейшем развитии под эгидой Node.js Foundation.

8 сентября 2015 года вышел Node.js v4.0.0 как результат слияния Node.js v0.12.7 и io.js v3.3.0.

Важными событиями в развитии платформы стало появление Atomics и SharedArrayBuffer в Node.js 9, а также worker_threads в Node.js 10.5 (и существенное развитие в Node.js 12). Это позволило создавать многопоточные параллельные приложения, реализовывать примитивы параллельного программирования и работать с разделяемой памятью.

Версии ВыпускСтатусКодовое имяДата выпускаОкончание поддержки 2013-03-11 2016-10-31 2015-02-06 2016-12-31 Argon 2015-09-08 2018-04-30 2015-10-29 2016-06-30 Boron 2016-04-26 2019-04-30 2016-10-25 2017-06-30 Carbon 2017-05-30 2019-12-31 2017-10-01 2018-06-30 Dubnium 2018-04-24 2021-04-30 2018-10-23 2019-06-01 Erbium 2019-04-23 2022-04-30 2019-10-22 2020-06-01 Fermium 2020-04-21 2023-04-30 2020-10-20 2021-06-01 Gallium 2021-04-20 2023-09-11Bringing forward the End-of-Life Date for Node.js 16 , Node.js Website 2021-10-19 2022-06-01 Hydrogen 2022-04-19 2025-04-30 2022-10-18 2023-06-01 Iron 2023-04-18 2026-04-30 2023-10-17 2024-06-01 Jod 2024-04-24 2027-04-30 2024-10-15 2025-06-01 Krypton 2025-04-22 2028-04-30 2025-10-15 2026-06-01 Lithium 2026-05-05 2029 Magnesium 2027 2030 Neon 2028 2031 Oxygen 2029 2032 Platinum 2030 2033

Примеры кода Создание и запуск HTTP-сервера на Node.js, выдающего Hello, world!: // Подключение модуля http const http = require("http");

// Создаём веб-сервер с обработчиком запросов const server = http.createServer((incomingMessage, response) => { console.log("Начало обработки запроса"); // Передаём код ответа и заголовки http response.writeHead(200, { "Content-Type": "text/plain; charset=UTF-8" }); response.end("Hello, world!"); });

// Запускаем веб-сервер server.listen(80, "127.0.0.1", () => { const info = server.address(); console.log(`Сервер запущен ${info}`); });

Другой пример скрипта, создающего TCP-сервер, который прослушивает порт 8080 и выводит на экран всё, что вводит пользователь: // Подключение модуля net const net = require("net");

// Создание TCP-сервера const server = net.createServer((stream) => { // Установка кодировки stream.setEncoding("utf-8"); // Объявление обработчика событий stream.on("data", (data) => { // Вывод данных в консоль console.log(data); }); });

// Запуск сервера server.listen(8080, "127.0.0.1");

Пакеты сторонних разработчиков В состав Node.js входит собственный менеджер пакетов npm, который предоставляет возможности установки, публикации и поиска пакетов из репозитория npmjs.com. Все зависимости находятся в папке node_modules.

Чтобы их использовать, сначала нужно инициализировать node js проект: npm init Появятся файлы package.json и package-lock.json, в которых будет информация о проекте и зависимостях Установка производится при помощи команды: npm install <packagename> Все доступные для установки пакеты и их краткое описание: npm search Этой же командой можно производить выборочный поиск пакетов.

Также можно установить все необходимые зависимости из файла package.json: npm install

См. также Список библиотек, реализующих концепцию событийно-ориентированного программирования: Twisted — на языке Python EventMachine — на языке Ruby Secure Scuttlebutt — протокол одноранговых сетей и социальная сеть с ячеистой топологией, написанный на JavaScript с применением Node.js

Примечания

Литература

Ссылки Официальный веб-сайт Репозиторий исходного кода Курс лекций по Node.js в Киевском политехническом институте Форум на Google groups Скринкаст Node.JS от А до Я

Категория:Веб-фреймворки на JavaScript Категория:Библиотеки JavaScript Категория:Свободное программное обеспечение, написанное на C++