05Sep

nodejs-module-development-1-638

Давайте создадим Ваш первый проект с Node.js. Нашей основной целью будет знакомство с модулями – способом который Node предлагает для организации проекта.

Установите Node на свой компьютер.

https://nodejs.org

Начнем с того что откроем ваш редактор в новой пустой директории start, здесь будет находиться наш проект. Нужно так чтобы ваш редактор воспринимал написанный вами код не как простой JS а как синтаксис Node, перед началом настройте это самостоятельно.

Вы можете следовать за прогрессом нашего урока скачав код из репозитория:

Создадим файл с именем server.js

И добавим следующий код:

 function User(name){
 this.name = name;
 }

 User.prototype.hello = function(who){
 console.log("Hello, " + who.name);
 };

 var tim = new User("Tim");
 var tom = new User("Tom");

 tim.hello(tom);

Добавим объект User, который будет создавать пользователей, у пользователей будут методы, к примеру, Hello, где who это другой user. Далее небольшой код по его использованию.

Запускаем через консоль/терминал: node server.js

Работает! Результат видно из консоли.

Теперь представим, что у нас уже довольно сложное приложение и необходимо выносить логику таких сложных модулей как user в отдельный файл. Для этого в Node используется команда require.

Создадим файл user.js

И вынесем туда данные

 function User(name){
 this.name = name;
 }

 User.prototype.hello = function(who){
 console.log("Hello, " + who.name);
 };

 console.log("user.js is required!");

Также подключим наш файл сделав следующую запись на первой строке server.

require('./user');

Готово, запускаем! Не работает, так как переменная User не определена. Почему? Это происходит из-за того, что в Node вы можете объявлять переменные, функции, которые будут являться глобальными для данного файла. Они не становиться доступны для подключения, это позволяет писать действительно независимые модули и не опасаться, что вы перезапишите какую-то глобальную переменную другого модуля. Как же поступить в нашем случае.

Для этого используют система экспортов. В каждом модуле есть специальная переменная exports – это объект, и то что вы туда поместите вернуться как результат require.

Например (сделаем запись в User.js):

exports.User = User;

А в server.js добавим

require('./user');

var tim = new user.User("Tim");
var tom = new user.User("Tom");

Результатом данного require будет объект который здесь называется exports, сейчас он состоит из единственного свойства функции user.

Если необходимо создать глобальную переменную в Node.js, то необходимо объявить ее таким образом:

global.User = User;

А также изменить server:

var tim = new User("Tim");
var tom = new User("Tom");

Проверим.

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

Поговорим о видах модулей:

  • JS – модули которые мы только что рассмотрели
  • NODE – файлы с таким расширением пишутся на языке C++ . Используются, когда нужна высокая производительность либо, когда нужно использовать какие-то возможности операционной системы, к которым нельзя обраться из JS и Node.js.
  • JSON

Создадим собственный JSON файл, который будет хранить информацию о нашей фразе в console.log User’а. Для этого:

Создадим JSON файл c именем ru.json

В него запишем:

var phrase = require('./en')

Таким образом найденный Json будет храниться во phrases.

В users запишем:

console.log(phrases.Hello + ", " + who.name);

Модули в формате JSON используется, когда хочется хранить какие-то данные в простейшем виде, в виде файлов.

Для дальнейшего развития проекта выделим user в отдельную директорию.

Создадим папку user.

Директории тоже можно подключать. При этом Node.js ищет файл с таким названием потом ищет файл .node/.JSON, если не находит ничего из перечисленного, то ищет директорию с названием user и в этой директории ищет файл с названием index.*и считает его модулем. Перетаскиваем user JS в директорию и переименуем в index.js, туда же переместим наш JSON. Теперь, если понадобиться добавить файлы для модуля user можно будет добавить их в эту директорию.

Вы можете скачать код урока  из следующего репозитория:

RPA_to_be_continuedМатериал урока взят из следующего скринкаста.

We are looking forward to meeting you on our website soshace.com

16. Уроки Node.js. Событийный цикл, библиотека libUV. Часть 2.

На этой радостной ноте выполнение JavaScript завершается, и libUV проверяет, есть ли какие-то watcher, которые могут сработать, то есть, есть ли какие-то внутренние обработчики. Если их нет, то завершается весь процесс Node.js, завершается весь событийный цикл. Но, в данном случае, один такой watcher, а именно обработчик на порту 3000 был поставлен. Именно поэтому процесс Node.js не завершится, а временно заснет. Он будет спать до появления какой-нибудь причины ему проснуться, например, до появления новых событий ввода-вывода.

Стиль кода

1) Название переменных и методов должно быть четким и ясным, не экономьте на буквах.
2) Методы должны быть не больше 30-40 строк, методы решают одну конкретную задачу, плохие методы делают все.

9. Уроки Node.js. События, EventEmitter и Утечки Памяти

Следующий объект, который нас интересует, это EventEmitter или, как его иногда называют, ЕЕ. EventEmitter представляет собой основной объект, реализующий работу с событиями в Node.js. Большое количество других встроенных объектов, которые генерируют события, ему наследуют. Для того чтобы воспользоваться EventEmitter достаточно подключить модуль “events”встроенный и взять с него соответствующее свойство (создадим ee.js) :

var EventEmitter = require(‘events’).EventEmitter;