Наверное, все, кто интересуется веб-разработкой, слышали про такую штуку, как Node.js, а кто-то даже хочет ее изучать. Сегодня мы хотим внести свою лепту в изучение этой платформы и описать ее возможности, а также такие моменты, как глобальные переменные, события и др.
Node.js — это платформа для запуска языка программирования JavaScript вне браузера, а конкретно в работе с сервером. JavaScript — это браузерный язык, который «завоевал» веб-разработку. Он активно применяется при разработке веб-сайтов, веб-приложений и браузерных игр. Он «заставляет» объекты на сайтах «двигаться» в окне браузера. Однако у почитателей этого языка всегда было желание сделать JavaScript независимым от браузера, тем самым расширив его функциональные возможности. Способом «расширить возможности» стала платформа Node.js.
Node.js — это не отдельный язык программирования, а возможность применять JavaScript в backend. То есть язык во frontend и backend остается один и тот же — это JavaScript, однако отличаются используемые API.
Возможности Node.js
Node.js — это возможность использовать JavaScript при работе с серверной частью веб-приложений. Во «фронте» JavaScript — непревзойденный лидер. В бэкенде совсем другие лидеры — это PHP, Python, Java и др. Поэтому Node.js приходится жестко конкурировать.
Однако Node.js обретает свою популярность за счет главной «фишки». При использовании этой платформы во фронтенде и бэкенде применяется один и тот же язык программирования. Такой подход удобен для fullstack-разработчиков, потому что им не нужно изучать еще один язык для серверной части приложений. Выучив JavaScript, они применяют его везде.
Важный момент — это специфика JavaScript. Во фронтенде этот язык часто применяется для взаимодействия с пользователями. То есть можно писать скрипты, которые ждут какого-то действия от пользователя и, дождавшись, запускают какой-то процесс. Часто какие-то действия пользователя на веб-ресурсе вызывают процессы и изменения в серверной части приложения. Поэтому приложения, в которых во «фронте» и в «бэке» работает JavaScript, быстрее откликаются на действия пользователя и быстрее работают. Примером такого приложения может быть любой онлайн-редактор.
Оценивая возможности Node.js, можно сказать, что платформа мало чем ограничена по функционалу. Да, она пока не так популярна, как PHP или Python в серверной части, но всему свое время. На сегодня использование Node.js зарекомендовало себя только с хорошей стороны. Среди пользователей этой платформы можно найти такие компании, как:
Netflix,
Uber,
eBay,
Yahoo,
и др.
Глобальные переменные в Node.js
Обговорив возможности Node.js, можно плавно переходить к описанию и изучению самой платформы. Во второй части статьи обговорим, что такое глобальные переменные в Node.js.
Глобальные переменные в Node.js объявляются при помощи ключевого слова «global». Также при помощи этого слова объявляются глобальные функции. «Глобальные» означает, что к ним можно получить доступ из любой части приложения. Во фронтенде альтернативой слова «global» является слово «window». Поэтому тем, кто знаком с JavaScript во «фронте», в частности со словом «window», будет легче разобраться с работой глобальных переменных, которые объявлены словом «global» в Node.js. И те и другие работают по похожей технологии.
Чтобы посмотреть, каким образом работают глобальные переменные в Node.js, давайте разработаем небольшой скрипт «salutation.js». Код будет выглядеть примерно так:
let presentDateTime = new Datetime();
global.datetime = presentDateTime;
module.exports.getMessage = function () {
let hours = presentDateTime.getHours();
if (hours > 17) return 'Приятный вечерок, ' + global.firstname;
else if (hours > 11) return 'Здравствуйте, ' + firstname;
else return 'Прекрасное утречко, ' + firstname;
};
Мы установили переменную «даты» как «глобальную» при помощи ключевого слова: «global.datetime=presentDateTime». Также в скрипте определили значение глобальной переменной «firstname». Эта переменная объявлена за пределами нашего скрипта, но точно с ключевым словом «global». Например, где-то может быть вот такой скрипт:
const salutation = require('./salutation');
global.firstname = 'Dormidont';
global.console.log(datetime);
console.log(salutation.getMessage());
Как видно, в данном скрипте объявлена глобальная переменная «firstname», которая используется в первом скрипте «salutation.js». Также на экран консоли выводится другая глобальная переменная — «datetime». Если запустить последний скрипт в работу, тогда увидим приветствие для имени «Дормидонт». Приветствие будет формироваться, исходя из времени запуска скрипта. Например, в результате работы скрипта может получиться следующее:
«Прекрасное утречко, Дормидонт»;
«Здравствуйте, Дормидонт»;
«Приятный вечерок, Дормидонт».
Глобальные переменные в Node.js могут выручать в определенные моменты. Однако, как и в других языках программирования, обилие глобальных переменных может вызвать дополнительные проблемы в коде. Поэтому по возможности лучше использовать локальные переменные, нежели глобальные.
События в Node.js
События в Node.js применяются часто. Реализация событий происходит по асинхронной архитектуре. В данной архитектуре задействованы специализированные объекты — эмиттеры. Эмиттеры генерируют различные события, а специализированные функции-обработчики (слушатели) их обрабатывают. Каждое событие генерирует объекты, которые являются представителями класса «EventEmitter».
Для того чтобы к какому-то событию «прикрепить» функцию-обработчика, используется специализированная функция «eventEmitter.on()». Каждому событию могут «прикрепляться» несколько функций-обработчиков.
Давайте рассмотрим, как это все реализуется в коде. Для этого создадим документ «example.js»:
const Emitter = require('events')
let emitter = new Emitter()
let eventFirstName = 'welcome'
emitter.on(eventFirstName, function () {
console.log('Salut!')
})
emitter.on(eventFirstName, function () {
console.log('Здравствуйте!')
})
emitter.emit(eventFirstName)
Заключение
Возможности Node.js пока ничем не ограничиваются. Эту платформу можно применять при разработке серверной части приложений любой сложности.
Мы решили внести собственный вклад в рост популярности этой платформы. Мы организуем серию статей о Node.js. Сегодня, к примеру, мы посмотрели, как выглядят глобальные переменные и события в Node.js.
Web