Node или Node.js — серверная платформа, использующая язык программирования JavaScript.
Особенностью данной технологии является асинхронный ввод-вывод, управляемый событиями. Node.js идеально подходит для событийной логики, но не предназначен для сложных вычислений на стороне сервера.
Node применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи NW.js, AppJS или Electron для Linux, Windows и macOS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом.
Прежде чем строить приложение на Node.js, сперва необходимо создать node-сервер. Именно по этому, существует мало хостинговых компаний для node. Например, для PHP имеется множество виртуальных хостов, на котором уже запущен сервер Apache. PHP разработчикам достаточно перенести свои файлы на такой же удаленный сервер, и... всё работает. А вот, для того, чтобы запустить приложения node, создать сервер, или установить node-зависимости, необходимы права суперпрользователя.
Саму платформу необходимо скачать (сайт nodejs.org) и установить.
Также не стоит забывать ставить ключевое слово var перед переменной, т.к. возможны ошибки с использованием глобальных переменных. Во всем остальном Node.js похож на JavaScript.
Модели работы серверов
Сервера поддерживают две модели мультипроцессорной обработки:
1) Мультипроцессорный поток. Для каждого запроса выделяется отдельный процесс, продолжающийся до тех пор, пока запрос не будет обслужен. Под каждый запрос создаются дочерние процессы. Недостаток: каждый процесс расходует память.
2) Мультипрограммный поток. Для каждого запроса выделяется отдельный программный поток. Такой подход эффективнее, т.к. требует меньшего расхода памяти.
В Node.js под каждый запрос создается единственный программный поток. Node-приложение выполняется в этом потоке и ожидает, что некое приложение сделает запрос. Когда node-приложение получает запрос, никакие другие запросы не обрабатываются до тех пор, пока не завершится обработка текущего запроса. При этом Node-приложение работает в асинхронном режиме, используя цикл обработки событий и функции обратного вызова. Приложение Node.js, получая запрос, не ожидает ответа на этот запрос. Вместо этого, запросу присваивается функция обратного вызова.
Итак, Node.js, не дожидаясь ответа, построчно запускает множество процессов. Это значит, что когда мы построчно вызываем несколько функций, мы не можем знать, какая из этих функций выполнится первой.
Callback-функции
Callback-функции — это такие функции, которые выполняются асинхронно, или же в отложенный момент времени. Вместо того, чтобы методично считывать код сверху вниз, асинхронные программы могут выполнять разные функции в разное время, исходя из порядка и скорости выполнения предыдущих функций, вроде http-запросов или считывания файловой системы. Callback-функции могут быть выполнены позже. Ключом к пониманию колбеков является осознание того, что они используются, когда время окончания какой-либо асинхронной операции неизвестно, однако известно место её окончания — последняя строчка асинхронной функции! Порядок сверху-вниз, в котором объявлены функции, не играет особой роли, в отличие от их логической/иерархичной вложенности. Сначала вы разбиваете код на функции, а затем используете колбеки для объявления, что запуск одной функции зависит от окончания другой. в Node, в большинстве случаев, используется асинхронный код.
Рассмотрим пример. Итак, имееются три асинхронные функции a
, b
и c
. Выполнение каждой из них занимает минуту, и после завершения каждой происходит запуск callback (которому передается первый аргумент). Если необходимо сказать Node.js «запусти a
, после её завершения выполни b
, после завершения b
запусти c
» это выглядело бы так:
a(function() { b(function() { c(); }); });
Режим REPL
Работать с Node.js можно из консоли командной строки либо с помощью надстроек для IDE (например, PHPShtorm). После установки платформы все Node-команды (в том числе создание и управление файлами) можно осуществлять с помощью режима REPL (запуск из командной консоли).
REPL – это режим командной консоли для Node. REPL – встроенный компонент Node.js.
REPL позволяет проверять JavaScript-код перед его включением в файлы, и создавать приложения в интерактивном режиме, сохраняя результаты после завершения. Работа в режиме REPL схожа с работой в других средах редактирования.
Для того чтобы его запустить, сперва откроем командную строку (сочитание клавиш cmd).
В командной строке наберем команду node.
Это всё, что необходимо сделать, чтобы запустить REPL.
REPL представляет приглашение командной строки, символом которой по умолчанию является угловая скопка (>). Все команды после этой скопки обрабатываются JavaScript движком.
Пользоваться REPL просто. Нужно просто набирать JavaScript код. При этом REPL выводит на экран только что набранные выражения.
Обратите внимание на ответ консоли “undefined”. Данное слово будет добавляться к каждому ответу консоли.
Клавиатурные команды REPL
Ctrl+C – Завершает выполнение текущей команды. Повторное нажатие приводит к выходу из REPL. |
Ctrl+D – Выход из REPL. |
Tab – Автоматическое завершение имени глобальной или локальной переменной. |
Стрелка вверх – Проход вверх по списку введенных команд. |
Стрелка вниз – Проход вниз по списку введенных команд. |
Подчеркивание (_) – Ссылка на результат вычисления последнего выражения. |
REPL-команды
.save – сохраняет в файле всё, что было написано в текущий объект контента. |
.break – возвращает к самому началу введенного кода, но весь многострочный ввод при этом будет потерян. |
.clear – перезапуск объекта контента и очистка любого многострочного выражения. Команда запускает сеанс с самого начала. |
.exit – выход из REPL |
.help – вывод всех доступных REPL команд. |
.load - загрузка файла в сеанс (.load путь/к/файлу.js) |
Загрузим файл test.js из папки Александр/Мои документы/My Web Sites/Пустой сайт