Автор оригинала: Scott Robinson.
Вступление
Некоторые из вас ветеранов узла, вероятно, слышали о нескольких из этих пакетов, но я надеюсь, что из этой статьи вы найдете некоторые действительно полезные, о которых вы никогда не слышали, как я. Я склонен забывать, что там так много пакетов, поэтому я сделал некоторое изучение и играл с несколькими. Это несколько моих любимых.
яргс
Ярги
Пакет прост и прямой, и он спасет вас от необходимости писать код котла во всех ваших проектах. Он обрабатывает аргументы командной строки для вас, поэтому пользователь может устанавливать флаги и вводить какие-либо данные, включая логические номера с плавающей запятой и строки.
Ярги
Будет даже обработать вашу «использование», поэтому вы можете легко сказать пользователю, какие варианты вашей программы требуются, в том числе, в том числе, которые требуются.
var argv = require('yargs') .usage('Usage: $0 -x [num] -y [num]') .demand(['x','y']) .argv; console.log('Pow(x, y):', Math.pow(argv.x, argv.y));
Таким образом, используя код выше, если мы попытались запустить скрипт только Узел index.js -x 3
Тогда мы получили это сообщение:
Usage: index.js -x [num] -y [num] Options: -x [required] -y [required] Missing required argument: y
Ярги
Достаточно приятно рассказать нам, что именно мы пропали в красиво отформатированном сообщении, и все, что нам нужно было сделать, было использовать простой .usage ()
и .demand ()
методы. Как только каждый пакет может использовать это.
слишком занят
Это был один из тех пакетов, которые, по общему признанию, я не был слишком впечатлен, но быстро понял, насколько это полезно.
Он работает путем опроса цикла событий узла и отслеживает «отставание», что время, которое требуется для выполнения запросов. Если отставание становится слишком долго, то Toobusy
Дайте вам знать, что позволит вам вернуть HTTP 503 «Сервис недоступного» кода для клиента.
Это важно, потому что Mountier ваш сервер получает, тем больше времени ожидания становятся. Это быстро становится проблемой составляющей, которая будет ухудшаться только с течением времени. Если вы ничего не сделаете, сервис выключится (ака-аварии) для всех. Но если вы остановите обработку рано, чтобы вернуть HTTP 503, то по крайней мере некоторые запросы будут обслуживаться. Лучше немного, чем ничего, верно?
Вы можете использовать Toobusy
Установив его:
npm install toobusy
А затем интегрировать его с чем-то вроде экспресс, как это:
var toobusy = require('toobusy'), express = require('express'); var app = express(); // Block requests if we get too busy app.use(function(req, res, next) { if (toobusy()) { res.send(503, "Too many users!"); } else { next(); } }); var server = app.listen(3000); process.on('SIGINT', function() { server.close(); toobusy.shutdown(); // Allow us to exit normally process.exit(); });
Это действительно не принимает такой большой код и даже меньше конфигурации, поэтому вы можете легко упаковать это в хорошую промежуточное программное обеспечение и включить его во все ваши экспресс-проекты. Просто убедитесь, что вы не резаете никаких критических запросов, которые имеют высокий приоритет или запросы, которые содержат критические данные.
мелочи
Как Toobusy
Я действительно не осознавал полезность Мел
Пока я не потратил некоторое время, чтобы подумать об этом и где я видел это. Пользовательские интерфейсы в командной строке очень сложно создавать, поскольку все, что вам нужно взаимодействовать с пользователем, это окно для отображения текста и ввода одного текста. Так как вы получаете важной информации, чтобы выделиться? Один из лучших способов – добавить форматирование в ваш текст. Экспресс – хороший пример этого. С их вывода вы можете легко найти самую важную информацию, поэтому вы никогда не пропустите что-то критическое.
Вот полный список всех различных типов стайлинга, которые Мел
Поддержка:
Модификаторы
смелый
подчеркивать
смущать
сброс настроек
скрытый
обратно
Италический
(не поддерживается везде)Strikethrough
(не поддерживается везде)
Цвета
красный
чернить
зеленый
белый
желтый
синий
(в Windows более яркая версия используется, поскольку обычный синий неразборчивый)Циан
серый
пурпурный
Цвета фона
овладение
BGBLACK
bord
BGGREEN
BGCYAN
Bgeellow
BGWHITE
БГМАГЕНТА
Хотя это единственные цвета, которые официально поддерживаются, любой XterM-совместимый терминал может использовать полные 8-битные цветные коды.
Чтобы отформатировать текст, вам просто нужно пройти строку через функцию для раскраски или форматирования. Итак, если вы хотите, чтобы пользователь видел критическую ошибку, вы, возможно, захотите добавить, как это подобное форматирование:
var chalk = require('chalk'); var str = chalk.red.bold('ERROR: ') + chalk.bold('Everything just blew up...'); console.log(str);
узел-инспектор
Хорошие отладчики могут быть трудно найти, особенно с простым в использовании GUI, поэтому я большой поклонник Узел-инспектор Отказ Этот отладчик работает, показывая вам веб-страницу GUI для отладки вашего кода. Он имеет все особенности стандартного отладчика, как точки останова, вступая в и выход из кода и переменной проверки. Он также имеет некоторые не таким общие функции, которые действительно полезны, такие как процессор и профилирование кучи, проверка запроса клиента сети, а также возможность жить редактировать код работы. Эта последняя функция является одним из моих любимых, так как она сэкономит вам много времени.
Обратите внимание, что инспектор узла совместим только с Chrome и Opera, поскольку он использует инструменты разработчика Blinke, который является интерфейсом отладчика JavaScript, который вы видите и совместимы с узлом.
Долгое время я довольно сильно полагался на использование консоли для вывода моей информации отладки, которая заканчивалась много времени, чтобы добавить, редактировать и удалить мои операторы отладки. Использование GUI буквально сохранила мне часы отладки времени. Сейчас отладчики не имеют ничего нового, но некоторые гораздо сложнее пользоваться, чем другие, и это хороший, чтобы пойти.
Terminal-Kit.
Если приложение вашего узла использует командную строку для чего-либо более чем простого ввода/вывода текста, вы, вероятно, должны использовать Терминальный комплект Отказ Terminal-Kit упрощает множество аспектов взаимодействия с пользователями, поэтому вы можете сосредоточиться на создании важных вещей в вашем приложении. Несколько вещей Terminal-Kit:
- Стайлинг текста (очень похоже на
Мел
) - Редактирование экрана
- прогресс
- Пользовательский ввод
Существует довольно много случаев использования, которые применяются к клемманному набору. Как, например, если вы скачаете что-то из Интернета, то было бы полезно показать панель прогресса для пользователя, чтобы они знали, что приложение не только что остановилось. Чтобы показать фиктивное прогресс, вам просто нужно сделать что-то подобное:
var terminal = require( 'terminal-kit' ).terminal; var progressBar; var progress = 0; function updateProgress() { // Add random progress progress += Math.random() / 10; progressBar.update(progress); // Check if we're done if (progress >= 1) { setTimeout(function() { terminal('\n'); process.exit(); }, 250); } else { setTimeout(updateProgress, 100 + Math.random() * 500); } } progressBar = terminal.progressBar({ width: 80, title: 'Downloading file:', eta: true, percent: true }); updateProgress();
Код выше приведен что-то подобное, которое было взято из Terminal-Kit Readme:
валидатор
Валидатор
Пакет помогает с кучей общих валидаций строк (например, адреса электронной почты, кредитные карты, IP-адреса и т. Д.). Таким образом, пакет имеет важное значение для всякого ввода пользователей. Вы можете почти подумать о своем пользователе как самую большую угрозу вашего продукта. Они сделают ошибки и вводят некоторые действительно странные вещи в текстовые поля, поэтому вам нужен проверенный пакет для проверки ввода для вас и избежать повреждения данных или сбоев сервера.
Несколько из наиболее полезных валидаторов:
ISEMAIL (ул [, варианты])
ISIP (ул [, версия])
Измобилефон (ул, локаль)
Isurl (str [, варианты])
Валидатор
Также имеет санитарные санитарки, которые могут нормализовать, удалять или избежать ваших входных строк. Например, вы можете определить комментарий пользователя, чтобы избежать их ввода вредоносного HTML/JavaScript. Это одно из наиболее распространенных случаев использования, поскольку злоумышленник настолько проще создать бот, чтобы проверить эту атаку для них на тысячах сайтов.
Некоторые полезные санитарки, предоставленные Валидатор
находятся:
черный список (вход, символ)
Побег (вход)
NormalizeMail (электронная почта [, Опции])
Whitelist (вход, Chars)
NormalizeMail ()
Метод интересный. Он обеспечит адрес электронной почты в нижнем регистре, и он даже удаляет игнорируемые символы из имени пользователя Gmail. Итак, если бы у вас была электронная почта [Защищена электронная почта]
, NormalizeMail ()
будет нормализовать это на [Защищена электронная почта]
Поскольку Gmail игнорирует точки ( .
) и теги.
грознуемый
Одна из более сложных задач, которые я решал в прошлом, работал загрузки файлов, именно поэтому грозные
сделал список. грозные
обрабатывает каждую часть загрузки, включая анализатор Multi-Part, написание файлов на диск и обработку ошибок. Несмотря на то, что многие WebApps не позволяют пользователю загружать огромные изображения и видео, многие позволяют фотографии профиля, что означает, что вы должны обрабатывать прием изображения, подтвердить его и записывать его на диск, что может быть не простой задачей в зависимости от на ваши ограничения.
Это одна из тех пакетов, которые я большой поклонник, потому что я действительно не хочу воспринимать колесо. Это делает одну работу, и это действительно хорошо.
Вот пример, используя грозные
Благодаря простому HTTP-серверу, измененным из примера, приведенного в сам пакет:
var http = require('http'); var util = require('util'); var formidable = require('formidable'); var path = require('path'); var PORT = 8080; var root = path.join(__dirname, '../'); exports.dir = { root : root, lib : root + '/lib', fixture : root + '/test/fixture', tmp : root + '/test/tmp', }; var server = http.createServer(function(req, res) { if (req.url == '/') { res.writeHead(200, {'content-type': 'text/html'}); res.end( '' ); } else if (req.url == '/post') { var form = new formidable.IncomingForm(), fields = []; form .on('error', function(err) { res.writeHead(200, {'content-type': 'text/plain'}); res.end('error:\n\n' + util.inspect(err)); }) .on('field', function(field, value) { console.log(field, value); fields.push([field, value]); }) .on('end', function() { console.log('-> post done'); res.writeHead(200, {'content-type': 'text/plain'}); res.end('received fields:\n\n ' + util.inspect(fields)); }); form.parse(req); } else { res.writeHead(404, {'content-type': 'text/plain'}); res.end('404'); } }); server.listen(PORT); console.log('listening on http://localhost:' + PORT + '/');
шелуши
Shelljs
Это пакет, который позволяет использовать общие команды UNIX в любой системе, будь то Windows, Linux или Mac. Таким образом, вам не нужно писать оба bash и Пакетные сценарии для ваших проектов. Shelljs
Дает вам окружающую среду Unix для работы, поэтому, если вы пишете скрипты, чтобы запустить тесты, совершать изменения или запускать на сервере, вам нужно только написать его один раз.
Вы можете сделать такие вещи, как ACT на выходе команд:
require('shelljs/global'); ls('*.js').forEach(function(file) { sed('-i', 'BUILD_VERSION', 'v2.0.3', file); sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file); sed('-i', /.*REPLACE_THIS_LINE.*\n/, cat('macro.js'), file); });
Выполнить общие команды:
require('shelljs/global'); mkdir('-p', 'release/data'); cp('-R', 'data/*', 'release/data');
Проверьте доступные двоичные файлы:
require('shelljs/global'); if (!which('git')) { echo('This script requires git!'); exit(1); }
И даже запустить родные команды, такие как вы бы в настоящем скрипте Bash/Batch:
if (exec('git commit -am "Release commit"').code !== 0) { echo('Error: Git commit failed!'); exit(1); }
Заключение
Надеюсь, из этой статьи вы нашли некоторые полезные инструменты, о которых вы никогда не слышали, или, возможно, понял, насколько полезны некоторые из этих пакетов. Быстрый поиск или просто просмотр проектов с открытым исходным кодом может привести к некоторым хорошим выводам, поэтому оставьте глаза открытыми. На NPMJS на NPMJS.com, наверное, есть 190 000+ (по состоянию на 10/15) пакетов.
Какой твой любимый «неизвестный» пакет? Дайте нам знать об этом в комментариях!