1. Введение

Node.js - это открытая кроссплатформенная среда выполнения серверного JavaScript, которая отлично подходит для решения почти любой задачи.

Node.js запускает движок JavaScript V8, ядро Google Chrome, вне браузера. Это обуславливает высокую производительность Node.js.

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

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

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

Существенное преимущество Node.js состоит в том, что миллионы разработчиков, пишущих код на JavaScript для браузера, теперь имеют возможность писать серверный код без необходимости изучения другого языка программирования.

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

Огромное количество библиотек

Npm с его простой структурой способствует быстрому росту экосистемы Node.js, на сегодняшний день в npm зарегистрировано свыше 1 000 000 открытых пакетов, которые вы можете использовать совершенно бесплатно.

Пример Node.js-приложения

Наиболее распространенным примером использования Node.js является создание веб-сервера: const http = require('http') const hostname = '127.0.0.1' const port = process.env.PORT const server = http.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}/\`) })

Первым делом, мы подключаем модуль http.

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

Метод createServer() создает новый HTTP-сервер и возвращает его.

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

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

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

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

Второй объект используется для предоставления данных отправителю запроса.

В данном случае, посредством res.statusCode = 200 мы присваиваем свойству statusCode значение 200 в качестве индикатора успешного выполнения запроса.

Мы устанавливает заголовок Content-Type (тип содержимого или контента) res.setHeader('Content-Type', 'text/plain') и закрываем ответ, добавляя контент в качестве аргумента в end(): res.end('Hello World\n')

Node.js-фреймворки и инструменты

Node.js - это обширная платформа. С целью удовлетворения потребностей разработчиков были созданы тысячи различных библиотек.

Со временем многие из них стали очень популярными. Вот список некоторых из них: