Основы работы с Node JS. Часть - 1.
Node.js — это среда выполнения JavaScript, построенная на JavaScript-движке V8 из Chrome. В основе Node.js лежит событийно-управляемая модель с неблокирующими операциями I/O, что делает её легкой и эффективной.
Все материалы по JavaScript
Другими словами: Node.js предлагает вам возможность писать невероятно производительный серверный код с использованием JavaScript. Как говорится в официальном описании: Node.js — это среда выполнения, использующая тот же JavaScript-движок V8, который вы можете найти в браузере Google Chrome.
Функции
- Простая:
- Именованная:
- Функция из функции:
function hello(){ console.log('Hello Proger'); }; hello();
var someName = function(){ console.log("SomeName Function"); }; someName();
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, то получим ошибку.
Если из файла нужно что-то просто вывести, то достаточно подключить, как в примере выше. а если использовать функции вне модуля, нам нужно их экспортировать.
- Используется метод
modelr.exports = name_function;
- Директиве
require('./array');
присвоить переменную.
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
- Создали переменную в которую присвоили модуль
util
. - Создадим конструктор.
- После этого можно использовать модуль
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 просто позволяет наследовать прототипы от одного конструктора к другому (не только конструктор событий).
Посмотрим на практике:
- Создадим массив
cars, в который пометим все объекты, которые мы создали. - Теперь ы легко можем перебирать массив и объекты в нем.
- Вызываем события.
let cars = [bmv, 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');
Код полностью 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('Удалили файл и папку'); }); });
Комментариев нет:
Отправить комментарий