Выразительный JavaScript (Хавербеке) - страница 217

.

>module.exports = function(string) {

>  return string.split("").map(function(ch) {

>    return String.fromCharCode(ch.charCodeAt(0) + 5);

>  }).join("");

>};

Замена >module.exports вместо добавления к нему свойств позволяет нам экспортировать определённое значение из модуля. В данном случае, результатом запроса нашего модуля получится сама функция искажения.

Функция разбивает строку на символы, используя >split с пустой строкой, и затем заменяет все символы на другие, с кодом на 5 единиц выше. Затем она соединяет результат обратно в строку.

Теперь мы можем вызвать наш инструмент:

>$ node main.js JavaScript

>Of{fXhwnuy

Установка через NPM

NPM, вскользь упомянутый в главе 10, это онлайн-хранилище модулей JavaScript, многие из которых написаны специально для Node. Когда вы ставите Node на компьютер, вы получаете программу >npm, которая даёт удобный интерфейс к этому хранилищу.

К примеру, один из модулей NPM зовётся >figlet, и он преобразует текст в “ASCII art”, рисунки, составленные из текстовых символов. Вот как его установить:

>$ npm install figlet

>npm GET https://registry.npmjs.org/figlet

>npm 200 https://registry.npmjs.org/figlet

>npm GET https://registry.npmjs.org/figlet/-/figlet-1.0.9.tgz

>npm 200 https://registry.npmjs.org/figlet/-/figlet-1.0.9.tgz

>figlet@1.0.9 node_modules/figlet

>$ node

>> var figlet = require("figlet");

>> figlet.text("Hello world!", function(error, data) {

>    if (error)

>      console.error(error);

>    else

>      console.log(data);

>  });

>  _   _      _ _                            _     _ _

> | | | | ___| | | ___   __      _____  _ __| | __| | |

> | |_| |/ _ \ | |/ _ \  \ \ /\ / / _ \| '__| |/ _` | |

> |  _  |  __/ | | (_) |  \ V  V / (_) | |  | | (_| |_|

> |_| |_|\___|_|_|\___/    \_/\_/ \___/|_|  |_|\__,_(_)

После запуска >npm install NPM создаст директорию >node_modules. Внутри неё будет директория >figlet, содержащий библиотеку. Когда мы запускаем >node и вызываем >require("figlet"), библиотека загружается и мы можем вызвать её метод >text, чтобы вывести большие красивые буквы.

Что интересно, вместо простого возврата строки, в которой содержатся большие буквы, >figlet.text принимает функцию для обратного вызова, которой он передаёт результат. Также он передаёт туда ещё один аргумент, >error, который в случае ошибки будет содержать объект >error, а в случае успеха – >null.

Такой принцип работы принят в Node. Для создания букв >figlet должен прочесть файл с диска, содержащий буквы. Чтение файла – асинхронная операция в Node, поэтому >figlet.text не может вернуть результат немедленно. Асинхронность заразительна – любая функция, вызывающая асинхронную, сама становится асинхронной.