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

Node.js: обзор

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

Его среда выполнения использует движок Google V8 JavaScript для интерпретации JavaScript. Node.js является легким и эффективным благодаря своей архитектуре, управляемой событиями, которая допускает асинхронный ввод-вывод. Экосистема пакетов npm для Node.js — крупнейшая в мире экосистема библиотек с открытым исходным кодом.

Что такое Node.js?

Среда выполнения Node поставляется со всем необходимым для запуска программы JavaScript.

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

Теперь JavaScript может делать гораздо больше, чем просто делать веб-сайты интерактивными.

Другие языки сценариев, такие как Python, теперь могут делать то, чего не может JavaScript.

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

Почему Node.js?

Вот формальное определение, данное на официальном веб-сайте Node.js:

Node.js® – это среда выполнения JavaScript, построенная на движке Chrome V8 JavaScript.

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

Экосистема пакетов Node.js, npm, является крупнейшей в мире экосистемой библиотек с открытым исходным кодом.

Давайте посмотрим, почему Node.js так популярен.

Ввод/вывод называется вводом/выводом. Это может быть что угодно, от чтения/записи локальных файлов до отправки API HTTP-запроса.

Ввод-вывод требует времени и, таким образом, задерживает другие процессы.

Рассмотрим следующий сценарий: мы запрашиваем у серверной базы данных информацию о пользователе1 и пользователе2, которую затем выводим на экран/консоль. Для ответа на этот запрос требуется время, но оба запроса пользовательских данных могут быть выполнены независимо и одновременно.

Блокировка ввода-вывода

Метод блокировки задерживает запрос данных пользователя 2 до тех пор, пока данные пользователя 1 не будут напечатаны на экране.

Нам пришлось бы начинать новый поток для каждого нового пользователя, если бы это был веб-сервер. Однако JavaScript является однопоточным (ну, не совсем так, но у него есть однопоточный цикл обработки событий, о котором мы поговорим позже). В результате JavaScript будет непригоден для многопоточных задач.

Здесь вступает в игру неблокирующая часть.

Неблокирующий ввод-вывод

С другой стороны, вы можете использовать неблокирующий запрос для отправки данных пользователю2, не дожидаясь ответа на запрос пользователя1. Оба запроса могут быть запущены одновременно.

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

Цикл событий

Цикл событий JavaScript подробно объясняется в следующих шагах.

  1. Поместите main() в стек вызовов.
  2. Поместите console.log() в стек вызовов. Затем он сразу запускается и вылетает.
  3. Поместите setTimeout(2000) в стек. setTimeout(2000) — это Node API. Когда мы вызываем его, мы регистрируем пару событие-обратный вызов. Событие будет ждать 2000 миллисекунд, затем функция обратного вызова.
  4. После регистрации в API setTimeout(2000) извлекается из стека вызовов.
  5. Таким же образом регистрируется второй setTimeout(0). Теперь у нас есть два Node API, ожидающих выполнения.
  6. После ожидания 0 секунд setTimeout(0) перемещается в очередь обратного вызова, и то же самое происходит с setTimeout(2000).
  7. В очереди обратного вызова функции ждут, пока стек вызовов не станет пустым, потому что в каждый момент времени может выполняться только один оператор. Об этом позаботится цикл событий.
  8. Выполняется последний console.log(), а main() извлекается из стека вызовов.
  9. Цикл обработки событий видит, что стек вызовов пуст и очередь обратного вызова не пуста. Таким образом, он перемещает обратные вызовы (в порядке «первым поступил — первым обслужен») в стек вызовов для выполнения.

нпм

Это библиотеки, созданные замечательным сообществом, которые решат большинство ваших распространенных проблем. Вы можете использовать npm (менеджер пакетов Node) в своих приложениях, чтобы ускорить и повысить эффективность разработки.

Когда мы устанавливаем Node на наш компьютер, мы получаем команду npm. Мы можем использовать это для взаимодействия с репозиторием. Его основное использование — загрузка пакетов.

Чтобы установить с ним пакет, мы можем запустить npm install, за которым следует имя пакета.

Require
Require решает три задачи:

  • Он использует API Node.js для загрузки таких модулей, как файловая система и HTTP, поставляемых с Node.js.
  • Он загружает сторонние библиотеки, установленные npm, такие как Express и Mongoose.
  • Вы можете использовать его, чтобы потребовать свои собственные файлы и модульность вашего проекта.

Require — это функция, которая возвращает module.exports и принимает параметр «путь».

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

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

Давайте напишем код с помощью Node.js, чтобы написать Hello World

Разве это не правда, что мы должны это сделать?

Добавьте следующее в файл app.js.

console.log("Hello World!");

Откройте терминал узла, измените каталог на папку, в которой сохранен файл, и запустите узел node app.js.

Вы только что закончили писать Hello World на Node.js.

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