От издателя
Технология Node.js всё еще молода и в то же время существует достаточно долго, чтобы крупные корпорации (LinkedIn, Yahoo! и Netflix) взяли ее на вооружение. Эта книга посвящена Node и тем модулям, которые образуют базовую функциональность Node. Вы начнете знакомство с основ создания веб-сервера и базовых функциональностей, а затем перейдете к системе модулей, REPL, разработке приложений, проблемам безопасности, дочерним процессам, познакомитесь с новыми функциональностями, появившимися в ES6, комплексной разработкой (Express, MongoDB, Redis, AngularJS и Backbone.js), приемами разработки приложений и, наконец, с использованием Node в других областях, таких как микроконтроллеры и “интернет вещей”.
Оглавление
Введение . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 9
Для кого написана эта книга .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 10
Структура книги .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 11
Соглашения, используемые в этой книге. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 14
Использование примеров кода. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 15
Благодарности. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 15
От издательства. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 15
Глава 1. Среда Node. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 16
Установка Node. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 17
Первая программа для Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 18
Простейшее приложение Hello, World. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 18
«Hello,World» — новая версия .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 22
Параметры командной строки Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 26
Среда хостинга Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 27
Хостинг Node на вашем сервере, VPS или управляемом хосте. .. .. .. .. .. 27
Облачный хостинг .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 28
LTS-версия и обновление Node. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 29
Новое семантическое управление версиями Node. .. .. .. .. .. .. .. .. .. .. .. . 30
Обновление Node. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 31
Node, V8 и ES6. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 32
Дополнения C/C++. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 34
Глава 2. Структурные элементы Node: глобальные объекты,
события и асинхронная природа Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 36
Объекты global и process .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 37
Объект global. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 37
Объект process. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 38
6… Оглавление
Буферы, типизованные массивы и строки. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 42
Буферы, JSON, StringDecoder и строки UTF-8 .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 46
Операции с буфером. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 48
Обратные вызовы и асинхронная обработка событий в Node .. .. .. .. .. .. .. . 51
Очередь событий (цикл). .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 51
Создание асинхронной функции обратного вызова. .. .. .. .. .. .. .. .. .. .. .. 55
EventEmitter. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 58
Цикл событий Node и таймеры .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 63
Вложенные обратные вызовы и обработка исключений. .. .. .. .. .. .. .. .. .. .. . 66
Глава 3. Модули Node и менеджер пакетов Node (npm). .. .. .. .. .. .. .76
Система модулей Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 76
Как Node находит и загружает модуль .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 77
Изоляция и модуль VM. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 81
Знакомство с NPM. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 86
Создание и публикация собственных модулей Node .. .. .. .. .. .. .. .. .. .. .. .. . 92
Создание модуля. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 92
Упаковка целого каталога .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 93
Подготовка модуля к публикации. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 94
Публикация модуля. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. . 98
Изучение модулей Node и три важнейших модуля. .. .. .. .. .. .. .. .. .. .. .. .. .. . 99
Управление обратными вызовами с использованием Async .. .. .. .. .. .. 101
Commander и волшебство командной строки .. .. .. .. .. .. .. .. .. .. .. .. .. .. 107
Модуль Underscore. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 109
Глава 4. Интерактивная работа с REPL и подробнее о Console . .. ..111
REPL: первые впечатления и неопределенные выражения. .. .. .. .. .. .. .. .. 112
Преимущества REPL: понимание внутренних принципов
работы JavaScript .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 114
Многострочный и более сложный код JavaScript .. .. .. .. .. .. .. .. .. .. .. .. .. .. 115
Команды REPL .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 119
REPL и rlwrap .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 120
Специализированная версия REPL. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 122
Бывает всякое — сохраняйтесь чаще. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 126
О необходимости консоли. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 126
Типы консольных сообщений, класс Console и блокировка. .. .. .. .. .. .. 127
Форматирование сообщения с использованием util.format()
и util.inspect(). .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 129
Расширенная обратная связь с объектом console и таймером. .. .. .. .. 133
Оглавление 7
Глава 5. Node и Веб . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..135
Модуль HTTP: сервер и клиент .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 135
Что необходимо учесть при создании статического веб-сервера .. .. .. .. .. 140
Использование Apache в качестве прокси-сервера для приложения Node . . 151
Разбор строки запроса с использованием Query String. .. .. .. .. .. .. .. .. .. .. 152
Преобразование DNS. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 153
Глава 6. Node и локальная система. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..156
Знакомство с операционной системой. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 156
Потоки и pipe(). .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 158
Знакомство с модулем File System. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 161
Класс fs.Stats. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 162
Отслеживание изменений в файловой системе .. .. .. .. .. .. .. .. .. .. .. .. .. 163
Чтение и запись файлов. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 165
Работа с каталогами. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 166
Файловые потоки. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 167
Обращение к ресурсам с модулем Path .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 170
Создание программы командной строки. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 172
Сжатие/восстановление данных с использованием Zlib .. .. .. .. .. .. .. .. .. .. 174
Каналы и модуль ReadLine. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 178
Глава 7. Сети, сокеты и безопасность. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .181
Серверы, потоки и сокеты. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 181
Сокеты и потоки .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 181
Серверы и сокеты TCP. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 182
Сокет UDP. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 188
Защита передаваемых данных .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 190
Настройка TLS/SSL. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 190
Работа с HTTPS. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 192
Модуль Crypto. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 195
Глава 8. Дочерние процессы .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .201
child_process.spawn .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 201
child_process.exec и child_process.execFile. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 205
child_process.fork. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 208
Выполнение приложения в дочернем процессе в Windows. .. .. .. .. .. .. .. .. 210
Глава 9. Node и ES6 . .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..213
Строгий режим. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 213
let и const. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 215
8… Оглавление
Стрелочные функции .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 218
Классы .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 220
Обещания и Bluebird. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 223
Глава 10. Комплексная разработка приложений Node . .. .. .. .. .. ..226
Express — фреймворк для приложений Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 227
Системы управления баз данных MongoDB и Redis. .. .. .. .. .. .. .. .. .. .. .. .. 234
MongoDB .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 234
Redis. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 238
AngularJS и другие комплексные фреймворки. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 247
Глава 11. Node в разработке и эксплуатации приложений . .. .. .. ..254
Отладка приложений Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 254
Отладчик Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 255
Node Inspector .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 260
Модульное тестирование. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 264
Модульное тестирование и модуль Assert .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 264
Модульное тестирование с использованием Nodeunit. .. .. .. .. .. .. .. .. .. 268
Другие фреймворки тестирования .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 270
Обеспечение бесперебойной работы Node……………………………. 273
Эталонные тесты и нагрузочное тестирование с использованием
Apache Bench. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 277
Глава 12. Node в других средах. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..280
Samsung IoT и GPIO .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 280
Windows с Chakra Node .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 282
Node для микроконтроллеров и микрокомпьютеров .. .. .. .. .. .. .. .. .. .. .. .. 284
Fritzing. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 285
Node и Arduino .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 290
Node и Raspberry Pi 2. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. 298
Купить книгу