.
>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, вскользь упомянутый в главе 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
не может вернуть результат немедленно. Асинхронность заразительна – любая функция, вызывающая асинхронную, сама становится асинхронной.