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 - это обширная платформа. С целью удовлетворения потребностей разработчиков были созданы тысячи различных библиотек.
Со временем многие из них стали очень популярными. Вот список некоторых из них:
- AdonisJs: фуллстек-фреймворк с акцентом на эргономику, стабильность и надежность. Adonis - один из самых быстрых веб-фреймворков для Node.js.
- Express: предоставляет один из самых простых и одновременно самых мощных способов создания веб-сервера. Ключем его успеха является минималистичный подход, простой функционал, акцент на основных возможностях сервера.
- Fastify: веб-фреймворк, сфокусированный на обеспечении лучшего опыта разработки с минимальными накладными расходами и мощной архитектурой плагина. Fastify является одним из самых проивзодительных веб-фреймворков.
- hapi: фреймворк с богатым функционалом для создания приложений и сервисов, позволяющий разработчикам сосредоточиться на написании переиспользуемой логики приложений вместо траты времени на построение инфраструктуры.
- koa: создан командой Express в целях упрощения и уменьшения размера библиотеки с учетом многолетнего опыта. Новый проект возник из-за необходимости внесения несовместимых изменений без разрушения сообщества, сформировавшего вокруг Express.
- Loopback.io: облегчает создание современных приложений со сложной системой зависимостей.
- Meteor: невероятно мощный фуллстек-фреймворк, предоставляющий изоморфный подход для создания приложений на JavaScript, когда код разделяется между клиентом и сервером. Когда-то meteor представлял собой готовое решение, содержащее все необходимое, сейчас он прекрасно сочетается с React, Vue и Angular. ОН также может использоваться для создания мобильных приложений.
- Micro: предоставляет легковесный сервер для создания асинхронных HTTP-микросервисов.
- NestJS: основанный на TypeScript прогрессивный Node.js-фреймворк для создания корпоративных, надежных и масштабируемых серверных приложений.
- Next.js: фреймворк для рендеринга React-приложений на стороне сервера.
- Nx: инструмент для фуллстек монолитной разработки посредством NestJS, Express, React, Angular и т.д. Nx помогает масштабировать разработку от одной до нескольких команд, работающих одновременно над множеством приложений.
- Socket.io: движок для коммуникации в режиме реального времени для создания сетевых приложений.