09Sep

nodejs_logo_green

Всем привет! Тема ближайших статей: Самые часто используемые модули Node.js.

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

var util = require('util');  
  
var obj = {  
  a: 5,  
  b: 6,  
};  
obj.self = obj;  
  
console.log( util.inspect(obj) ); 

Запускаем node inspect.js и видим, что, действительно, все красиво обработалось. При этом, если у объекта есть свойства inspect, и оно равно функции, то эта функция будет вызвана.

var util = require('util');  
  
var obj = {  
  a: 5,  
  b: 6,  
  inspect: function() {  
    return 123;  
  }  
};  
obj.self = obj;  
  
console.log( util.inspect(obj) );  

Именно ее результат будет возвращен. Например, я сделал функцию inspect и вернулся 123. Таким образом, поведение метода util inspect несколько напоминает toString. И этот метод используется в console автоматически, если она хочет добавить в log какой-то объект. Я убрал util inspect:

var util = require('util');  
  
var obj = {  
  a: 5,  
  b: 6,  
  inspect: function() {  
    return 123;  
  }  
};  
obj.self = obj;  
  
console.log(obj);

Вызываю. Все работает так же. Потому что, на самом деле, console вызывает его внутри. Однако, иногда все же необходимо обращаться к util inspect явно, в первую очередь, в тех случаях, когда мы хотим вывести что-то не в console, а, например, получить строчное представление объекта для вывода в файл. Кроме того, есть дополнительные параметры util inspect: можно, например, задать глубину вывода объекта, по умолчанию два. Но они используются редко.

Следующая команда – это  util format. Создадим файл format.js.

var util = require('util');  
var str = util.format("My %s %d %j", "string", 123, {test: "obj"});   
  
console.log(str);

Util format получает строку и дальше оно подставляет в нее следующие параметры. Вместо  %s будет выведена строка, вместо %d будет выведено число, а далее вместо %j будет выведен объект в формате json. Если я сейчас это запущу, то вот что я получу:

{“text”:”obj”}

Обратите внимание, это формат json. Это не вывод util inspect. Соответственно, если вдруг я вместо числа передал здесь что-то еще, то при выводе я получу NaN, потому что автоматически происходит конвертация.

Метод util format также используется в console не явно. Если я сейчас возьму и перенесу это прямо в консоль:

var util = require('util');  
var str = util.format("My %s %d", "string", 123, {test: "obj"});   
  
console.log(str);

то все отлично продолжит работать:

var util = require('util');  
  
  
console.log("My %s %d", "string", 123, {test: "obj"}); 

Следующий, последний метод util, о котором пойдет речь – это метод util inherits. Чтобы его было легче понять, я позволил себе скачать исходники Node.js и достать из них файл util.js. Это как раз и есть исходник модуля util. И там на чистом java script есть метод inherits:

exports.inherits = function(ctor, superCtor); {  
ctor.super_ = superCtor  
ctor.prototype = Object.create(superCtor.prototype, {  
constructor: {  
value:ctor,  
enumerable:false,  
writable:true,  
configurable:true  
}  
});  
}; 

Если вы знаете, как работает OOP в JavaScript, тогда вы этот метод сразу понимаете. Если же нет, то рекомендуется разобраться с этим. Впрочем, использовать его одно и так довольно просто. Достаточно создать родительский класс, конструктор, методы в прототипе.

var util = require('util');  
  
// Parent  
function Animal(name) {  
  this.name = name;  
}  
  
Animal.prototype.walk = function() {  
  console.log("Running " + this.name);  
};  

Затем, чтобы унаследовать от него, создаем конструктор потомка и вызываем util inherits:

// Потомок  
function Rabbit(name) {  
  this.name = name;  
}  
  
util.inherits(Rabbit, Animal);

Потом добавляем в прототип методы:

Rabbit.prototype.jump = function() {  
  console.log("Jumping " + this.name);  
};  

Получается, что все объекты, создаваемые этим конструктором, будут наследовать от Animal. Так что если я сейчас запущу код node inherits.js, то rabbit.walk сначала вызовет метод родителя, а rabbit.jump вызовет метод потомка. Все как обычно при наследовании:

var util = require('util');

// Parents
function Animal(name) {
    this.name = name;
}

Animal.prototype.walk = function() {
    console.log("Running " + this.name);
};

// Child
function Rabbit(name) {
    this.name = name;
}

util.inherits(Rabbit, Animal);

Rabbit.prototype.jump = function() {
    console.log("Jumping " + this.name);
};

// Usage
var rabbit = new Rabbit("rabbit");
rabbit.walk();
rabbit.jump();

Код данного урока можно скачать отсюда.

More-To-Come-Soon

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

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

12. Уроки Node.js . Документация Http Модуля.

В дальнейшем мы будем часто обращаться к модулю http, поэтому сейчас небольшая экскурсия по его документации, что в ней есть и где это искать.
Сейчас модуль http совмещает в себе два функционала. Первый – это функционал сервера. http.createServer создает новый объект класса Server. Если передан обработчик, то он ставится на событие request. Второй функционал – это createClient.

Code Review

Code Review проводиться в назначенных парах не мене 2 месяцев с даты формирования пары для лучшего понимания проекта поверяющими сторонами.

Таблица результатов ревью здесь.

Советы по Code Review: