Fork me on GitHub

6. Node.js модули, о которых вы должны знать: read

Всем привет! Это шестой пост в моей новой серии статей Node.js модули, о которых вы должны знать.

Первый пост был про dnode — фристайл RPC библиотеку для node.js. Второй пост был посвящен optimist — легковесному парсеру командной строки для node.js. Третий был про lazy — ленивые списки для node.js. А четвертый — про request — швецарский нож HTTP стримминга. Пятый был про hashish — библиотеку для работы с хэшами.

В этой заметке я расскажу про новый (по состоянию на 08-дек-2011, прим. перевод.) модуль — read, который был создан буквально вчера. Автор — Isaac Z. Schlueter, который так же является автором npm. По сути, read — это read(1) для node.js. С его помощью вы легко сможете читать стандартный поток ввода (stdin).

Пример использования:

var read = require('read');

read({ prompt : 'Username: ' }, function (err, user) {
  read({ prompt : 'Password: ', silent : true }, function (err, pass) {
    console.log(user, pass);
    process.stdin.destroy();
  });
})

Такая вложенность функция — это, конечно, «не айс». Так что, лучше воспользоваться, например, seq, библиотекой асинхронного контроля потока событий, автором которой является уже не безызвестный James Halliday. Немного позже я так же расскажу про этот модуль. Вот как будет выглядеть тот же пример с seq:

var read = require('read');
var Seq = require('seq');

Seq()
  .seq(function () {
    read({ prompt : 'Username: ' }, this.into('user'));
  })
  .seq(function () {
    read({ prompt : 'Password: ', silent : true }, this.into('pass'));
  })
  .seq(function (pass) {
    console.log(this.vars.user, this.vars.pass);
  });

Вот все настройки, которые поддерживает read:

prompt  - Что вывести на экран (stdout) перед чтением ввода (stdin).
silent  - Не отображать ввод пользователя при наборе.
num     - Максимальное число символов, которое необходимо прочитать.
delim   - Символ, обозначающий конец ввода. По умолчанию: "\n".
timeout - Время ожидания ввода пользователя в мс.

Обратите внимание, что если silent == true или задан num, или для delim задано что-то, отличное от "\n", то чтение будет происходить по-символьно.

Установить read можно через npm:

npm install read

Настлаждайтесь!