21Sep

node-js-development-Brillmindz
На этом занятии наша основная цель – улучшить нашу разработку на Node.js. Первое средство, которое мы для этого изучим, называется supervisor. До этого момента мы разработали эхо-сервер.

var http = require('http');
var url = require('url');

var server = http.createServer();

server.on('request', function(req, res) {
    var urlParsed = url.parse(req.url, true);

    if (req.method == 'GET' && urlParsed.pathname == '/echo' && urlParsed.query.message) {
        res.end(urlParsed.query.message );
        return;
    }

    res.statusCode = 404;
    res.end('Not Found');
});

server.listen(1337);

В процессе разработки была некоторая сложность. Любые изменения в коде требовали перезапуска сервера. Это легко объяснить, ведь Node.js считывает файлы только один раз. Считав файл, он получает соответствующий объект модуля и в дальнейшем использует его. А что делать в процессе разработки?
Есть, конечно, вариант очистить внутренний cache Node.js, но наиболее часто используют другой подход, а именно специальный модуль, который отслеживает все файлы с директории. Как только в ней что-то меняется, перезапускает Node.js. один из таких модулей называется supervisor. Этот модуль содержит в себе console утилиту, которая должна быть доступна по системному пути.

Поэтому установим его глобально:
npm ig supervisor

Теперь я запускаю вместо node server.js  -> supervisor server.js

Что это  нам дает?  Сейчас я изменю файл, например, добавлю в него пустую строку и сохраню то, что получилось.

var http = require('http');
var url = require('url');

var server = http.createServer();

server.on('request', function(req, res) {
    var urlParsed = url.parse(req.url, true);

    if (req.method == 'GET' && urlParsed.pathname == '/echo' && urlParsed.query.message) {
        res.end(urlParsed.query.message );
        return;
    }


    res.statusCode = 404;
    res.end('Not Found');
});

server.listen(1337);

Вы заметили? Crashing child  и старт новый. Давайте еще раз. Уберем строку, сохраним.

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

Supervisor все время следит за файлами, и как только он видит, что изменились файлы с расширениями по умолчанию node либо js, то перезапускает Node.

Более того, если в этой директории есть другие файлы, и они изменены, то тоже supervisor смотрит над всем содержимым директории, наблюдает, какие файлы изменились. Как только какой-нибудь из них будет изменен, включая путь директории, то он запустит Node. Это очень удобно при разработке больших многоуровневых проектов.

Какие подводные камни есть у supervisor? Они тоже присутствуют.
Первый подводный камень, о котором необходимо знать, это новые файлы. Создадим файл file.js. Сохраним.

Никакой реакции не происходит. Это потому что supervisor, во всяком случае, текущая его версия, наблюдает за каждым файлом индивидуально. Она просто не знает, что появился новый файл.  Но, если мы после того, как изменили файл, внесем его через require-сервер, то как раз изменения в сервере оно отследит и все перезапустит. Ну, а  после перезапуска будет следить и за новым файлом js тоже. Таким образом, если добавление нового файла влечет за собой изменения существующих, а, как правило, оно так и есть, то у нас все хорошо. Но в тех редких случаях, когда нет, то придется иметь в виду, что нужно перезапускать supervisor вручную. Автоматически новые файлы он не обнаружит.

Следующий подводный камень supervisor заключается в то, что если мы поставили много модулей, и у нас есть большая директория node.modules, а  каждый модуль ставит свои зависимости, то общее количество файлов в поддиректории может стать очень большим, и supervisor начнет есть очень много процессорного времени. Особенно это заметно на ноутбуках, которые при этом начинают гораздо сильнее греться. Чтобы такого не было, желательно supervisor либо запускать с параметром ignor и указывать в нем что нужно игнорировать  node.modules, либо переместить эту node.modules куда-то наверх, потому что это внешние модули. Они изменяются не так уж часто.

Итак, далее для разработки мы будем использовать   supervisor.

Код урока находится в нашем репозитроии.

weekly-header-boxes-retina

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

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

20. Уроки Node.js. Потоки данных в Node.JS, fs.ReadStream

Всем привет! Тема этого занятия: Потоки данных в Node.js. Мы постараемся разобраться в этой теме более подробно, поскольку, с одной стороны, так получается, что потоки в обычной браузерной JavaScript разработке отсутствуют, а с другой стороны, уверенное владение потоками необходимо для грамотной серверной разработки, поскольку поток является универсальным способом работы с источниками данных, которые используются повсеместно.

Доклад. Agile (вводная часть). Scrum

Гибкая методология разработки (Agile) описывает набор принципов для разработки программного обеспечения в соответствии с которым требования и решения развиваются за счет совместных усилий самоорганизующихся кросс-функциональных команд.

Leave a Reply