Translate

Поиск по этому блогу

суббота, 29 сентября 2018 г.

Основы Node JS ( I ).

Основы работы с Node JS. Часть - 1.

Node.js — это среда выполнения JavaScript, построенная на JavaScript-движке V8 из Chrome. В основе Node.js лежит событийно-управляемая модель с неблокирующими операциями I/O, что делает её легкой и эффективной.



Все материалы по JavaScript


Другими словами: Node.js предлагает вам возможность писать невероятно производительный серверный код с использованием JavaScript. Как говорится в официальном описании: Node.js — это среда выполнения, использующая тот же JavaScript-движок V8, который вы можете найти в браузере Google Chrome.

Функции

  1. Простая:


  2. 
    function hello(){
     console.log('Hello Proger');
    };
    
    hello();
    
    


  3. Именованная:


  4. var someName = function(){
     console.log("SomeName Function");
    };
    someName();
    
    


  5. Функция из функции:


  6. 
    function call(func){
     func();
    };
    
    call(someName);
    
    


Модули

В файл array.js запишем:


let array_counter = function ( array ) {
 return 'В массиве находится ' + array.length + ' элементов.';
};

console.log( array_counter( [ 1, 33, 45, 23, 7, 31, 40 ] ) );

Подключение к index.js

require('./array');



Если мы подключаем какой-то файл, то это не значит, что мы можем использовать все функции из этого файла.

Например, если вывод в консоль перенести из файла array.js в index.js, то получим ошибку.

Если из файла нужно что-то просто вывести, то достаточно подключить, как в примере выше. а если использовать функции вне модуля, нам нужно их экспортировать.

  1. Используется метод modelr.exports = name_function;
  2. Директиве require('./array'); присвоить переменную.
Файл index.js


let counter = require('./array');

console.log( counter( [ 1, 33, 45, 23, 7, 31, 40 ] ) );



Файл array.js


let array_counter = function ( array ) {
 return 'В массиве находится ' + array.length + ' элементов.';
};

module.exports = array_counter;



Несколько функций из одного модуля.


let array_counter = function ( array ) {
 return 'В массиве находится ' + array.length + ' элементов.';
};


let some_value = 324;

let multiplay = function(x, y){
 return `Число ${x} умножить на ${y} = ${x * y} `;
};

module.exports.array_counter = array_counter;
module.exports.some_value = some_value;
module.exports.multiplay = multiplay;



Файл index.js


let things = require('./things.js');

console.log( things.array_counter( [ 1, 33, 45, 23, 7, 31, 40 ] ) );

console.log(things.some_value);

console.log(things.multiplay(4, 8));



Упростим


module.exports.array_counter = function ( array ) {
 return 'В массиве находится ' + array.length + ' элементов.';
};


module.exports.some_value = 324;

module.exports.multiplay = function(x, y){
 return `Число ${x} умножить на ${y} = ${x * y} `;
};




let array_counter = function ( array ) {
 return 'В массиве находится ' + array.length + ' элементов.';
};


let some_value = 324;

let multiplay = function(x, y){
 return `Число ${x} умножить на ${y} = ${x * y} `;
};

module.exports = {
array_counter : array_counter,
some_value : some_value,
multiplay : multiplay
};





Отслеживание событий в Node

Подключение встроенных модулей.

Все делается через директиву require('name_modele');

let events = require('events');

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

Создадим функцию, которая отслеживает конкретное событие. Её мы и будем вызывать, чтобы убедиться, что событие сработало. Это пример чисто технический. Сами создаем событие и сами его отслеживаем.

Создадим переменную, которая будет отвечать за обработчик события.

let myEmit = new events.EventEmitter();

Для события используем метод .on(). Первым аргументом - название события, которое отслеживаем. Вторым аргументом запишем функцию. которая будет срабатывать на это событие.

Например:

myEvent.on('click', function(){console.log('Event click'});

Теперь остается только вызвать придуманное нами событие и передать параметр text.


let events = require('events');

let myEmit = new events.EventEmitter();

myEmit.on('some_event', function(text){
 console.log(text);
});

myEmit.emit('some_event', 'Обработчик событй сработал');





Модуль позволяющий наследовать события - Util

  1. Создали переменную в которую присвоили модуль util.
  2. Создадим конструктор.
  3. После этого можно использовать модуль util, чтобы все объекты созданные на основе этого конструктора Cars унаследовали обработчик событий.


util.inherits(ctor, superCtor);

Первым параметром указываем конструктор, который будет наследовать. Вторым - что конкретно наследовать.

util.inherits(Cars, events.EventEmitter);

Круглые скобки событию не надо.

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


let events = require('events');
let util = require('util');

let Cars = function(model){
 this.model = model;
}

util.inherits(Cars, events.EventEmitter);

let bmv = new Cars('BMW');
let audi = new Cars('Audi');
let volvo = new Cars('Volvo');



На самом деле util.inherits просто позволяет наследовать прототипы от одного конструктора к другому (не только конструктор событий).

Посмотрим на практике:

  1. Создадим массив cars, в который пометим все объекты, которые мы создали.


  2. let cars = [bmv, audi, volvo];

  3. Теперь ы легко можем перебирать массив и объекты в нем.


  4. cars.forEach(function(car){ car.on('speed', function(text){ console.log( `Auto ${car.model} speed is $(text}`)); }); });

  5. Вызываем события.


bmw.emit('speed', '245.3 km');

Код полностью index.js


let events = require('events');
let util = require('util');

let Cars = function(model){
 this.model = model;
}

util.inherits(Cars, events.EventEmitter);

let bmw = new Cars('BMW');
let audi = new Cars('Audi');
let volvo = new Cars('Volvo');

let cars = [bmw, audi, volvo];

cars.forEach(function(car){
 car.on('speed', function(text){
  console.log( 'Auto ' + car.model + ' speed is ' + text);
 });
});

bmw.emit('speed', '245.3 km');






Теперь мы можем добавить различные авто и получить у каждого событие.


bmw.emit('speed', '245.3 km');
volvo.emit('speed', '198 km');
audi.emit('speed', '259 km');





Запись и чтение файлов

Синхронное чтение.

Создадим text.txt файл из которого будем что-то читать.

Добавим в него текст:

Файл text.txt.


Ура! Вы меня прочитали!
You read this text.



При этом важно указать кодировку, иначе кириллицу отображать не будет.



Читать и записывать файлы поможет модуль fs. Вызываем его.

fs.readFileSync(path, options);

Первый параметр - файл и путь к нему.

Второй - кодировка. В нашем случае - 'utf8'

Пока не прочитаем файл, код ниже не сработает.

Поместим весь этот текст в переменную file_readed


let fs = require('fs');

let file_read = fs.readFileSync('text.txt', 'utf8');

console.log(file_read);





Синхронная запись.

Используем тот же модуль, но функцию

fs.writeFileSync(path, data, options);

Первый параметр - название файла куда записывать. Если его нет, то он будет создан.Например some_new_file.txt

Второй параметр - данные (текст). Можно указать просто имя переменной, в которой этот текст.

Например:

let message = 'Hello World - Привет Мир\n' + file_read;


let fs = require('fs');

let file_read = fs.readFileSync('text.txt', 'utf8');

let message = "Hello World -  Привет Мир \r\n" + file_read;

fs.writeFileSync('some_new_file.txt', message);



Запустим

node index


Ничего не произойдет в консоли, но зато появится новый файл some_new_file.txt в нашей директории.

Откроем и там:



Асинхронная.

Отличается тем, что код, который расположен ниже функции будет обрабатываться и не ждать завершения обработки функций чтения и записи.

Чтение файлов асинхронное

Функция почти такая же. но есть третий параметр, который есть функция которая сработает тогда. когда файл будет прочтен.

В этой функции первым параметром err - ошибка. Если не получится прочитать файл обратимся к ней, а вторым data - непосредственно данные.


let fs = require('fs');

fs.readFile('text.txt', 'utf8', function(err, data){
 console.log(data);
});

console.log('Test');



Вывод слова Test для наглядности асинхронности кода.



Запись файла асинхронная

Используется почти такая же конструкция, что и для чтения.

Вторым параметром пойдет тот текст, который мы хотим записать. Можно его поместить в переменную, как и с синхронными функциями.

Третьим параметром функция в которой можно ничего не возвращать.


let fs = require('fs');

fs.readFile('text.txt', 'utf8', function(err, data){
 console.log(data);
});

fs.writeFile('some.txt', 'Hello Programmers from me', function(err, data){});

console.log('Test');





Удаление файлов. Создание и удаление директории.

Удаление файлов.

Используется модуль fs

let fs = require('fs');

fs.unlinkSync(path);
fs.unlink(path, callback);


Первый параметр название файла который удаляем, или путь.

Второй - Функция, которая будет срабатывать, после завершения удаления конкретного файла.

В нее можно ничего не передавать, но она нужна, чтобы не было ошибки.


let fs = require('fs');

fs.unlink('text1.txt', function(){
 console.log('File text1 deleted');
});





Создание директории.


fs.mkdirSync(path, mode);
fs.mkdir(path, mode, callback);


Первый параметр - путь (название папки)

Второй - не обязательный при синхроне.


let fs = require('fs');

fs.mkdir('new-test', function(){
 fs.writeFile('./new-test/some-new.txt', 'Hello world!', function(){
  console.log('everything is done');
 });
});





Удаление.

Удалить можно только пустую папку.

fs.rmdirSync(path);
fs.rmdir(path, callback);



let fs = require('fs');

fs.unlink('./new-test/some-new.txt', function(){
  fs.rmdir('./new-test', function(){
  console.log('Удалили  файл и папку');
 });
});









                                                                                                                                                             

Комментариев нет:

Отправить комментарий



Хотите освоить самые современные методы написания React приложений? Надоели простые проекты? Нужны курсы, книги, руководства, индивидуальные занятия по React и не только? Хотите стать разработчиком полного цикла, освоить стек MERN, или вы только начинаете свой путь в программировании, и не знаете с чего начать, то пишите через форму связи, подписывайтесь на мой канал в Телеге, вступайте в группу на Facebook.Пишите мне - kolesnikovy70 почта gmail.com