ebook img

Изучаем Node. Переходим на сторону сервера PDF

304 Pages·2017·5.11 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Изучаем Node. Переходим на сторону сервера

ББК 32.988.02-018 УДК 004.737.5 П21 Пауэрс Ш. П21 Изучаем Node. Переходим на сторону сервера. 2-е изд., доп. и перераб. — СПб.: Питер, 2017. — 304 с.: ил. — (Серия «Бестселлеры O’Reilly»). ISBN 978-5-496-02941-4 Технология Node.js всё еще молода и в то же время существует достаточно долго, чтобы крупные корпорации (LinkedIn, Yahoo! и Netflix) взяли ее на вооружение. Эта книга посвящена Node и тем модулям, которые образуют базовую функциональность Node. Вы начнете знакомство с основ создания веб-сервера и базовых функциональностей, а затем перейдете к системе модулей, REPL, разработке приложений, проблемам безопасности, дочерним процессам, познакомитесь с новыми функциональностями, появившимися в ES6, комплексной разработкой (Express, MongoDB, Redis, AngularJS и Backbone.js), приемами разработки приложений и, наконец, с использованием Node в других областях, таких как микроконтроллеры и «интернет вещей». 12+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.) ББК 32.988.02-018 УДК 004.737.5 Права на издание получены по соглашению с O’Reilly. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как над- ежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги. ISBN 978-1491943120 англ. Authorized Russian translation of the English edition of Learning Node, 2nd Edition ISBN 9781491943120 © 2016 Shelley Powers This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same ISBN 978-5-496-02941-4 © Перевод на русский язык ООО Издательство «Питер», 2017 © Издание на русском языке, оформление ООО Издательство «Питер», 2017 © Серия «Бестселлеры O’Reilly», 2017 Оглавление Введение. 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 Введение Технология Node.js существует достаточно долго, чтобы быть принятой некоторыми крупными технологическими компаниями (LinkedIn, Yahoo! и Netflix). При этом она все еще остается достаточно молодой, чтобы вызы- вать определенное беспокойство у типичного корпоративного руководителя среднего звена. Когда-то она послужила движущей силой для создания более сложного языка JavaScript, а также стала единственным безопасным местом для использования нового, улучшенного сценарного языка. А поскольку долг платежом красен, передовой язык JavaScript стал движущей силой развития переработанной структуры Node.js и новой парадигмы выпуска. Среда Node.js также переопределила то, что можно делать с JavaScript. В наши дни работодатель требует от разработчика JavaScript опыта работы в сервер- ной среде так же часто, как опыта работы в более знакомой среде браузера. Кроме того, Node.js создает новый серверный язык, заслуживающий внимания разработчиков Ruby, C++, Java и PHP на стороне сервера, особенно если они уже владеют JavaScript. Я считаю, что Node.js — интересная штука. По сравнению со многими другими средами начало работы с ним, создание и размещение приложения и экспери- менты с новыми возможностями требуют минимальных усилий. Служебный код, необходимый для проекта Node, не такой сложный и нудный, как в других средах. Только у PHP существует настолько простая среда, но даже она требу- ет тесной интеграции с Apache для создания приложений, ориентированных на обслуживание внешних запросов. Впрочем, при всей простоте Node.js некоторые аспекты выяснить самостоя- тельно довольно сложно. Действительно, для изучения Node.js необходимо хорошее знание среды и базовых API, но вам также не обойтись без поиска и освоения этих трудноуловимых аспектов. 10. . . Введение Для.кого.написана.эта.книга На мой взгляд, читатели этой книги относятся к двум категориям. В первую входят разработчики, которые создавали клиентские приложения с разными библиотеками и фреймворками и теперь хотят перенести свои на- выки владения JavaScript на сторону сервера. Ко второй категории относятся разработчики серверных приложений, ко- торые хотят попробовать что-то новое или перейти на более современную технологию. Они работали на Java или C++, Ruby или PHP, а теперь они желают освоить язык JavaScript и объединить его со своим знанием сервер- ной среды. У этих двух вроде бы разных аудиторий есть одно общее знание: JavaScript (или ECMAScript, если выражаться точнее). Читатель этой книги должен очень уверенно владеть языком JavaScript. Есть и другое сходство: обеим категориям придется изучать одни и те же азы Node, включая базовый Node API. Однако каждая категория смотрит на изучение Node со своей точки зрения и руководствуется своими навыками. Чтобы книга приносила больше пользы, я постаралась представить материал с обеих точек зрения. Например, разра- ботчика C++ или Java может заинтересовать создание дополнений для Node на языке C++, которое вряд ли вызовет интерес у разработчика клиентских при- ложений. В то же время такие концепции, как прямой или обратный порядок байтов, могут быть очень знакомыми для разработчиков серверных приложе- ний, но не для специалистов по клиентскому программированию. Я не могу глубоко изложить любую из этих перспектив, но постараюсь, чтобы материал не показался слишком сложным или скучным любому читателю. Я совершенно точно не собираюсь заставлять вас что-либо заучивать наизусть. В книге будут представлены API базовых модулей, но я не стану описывать все объекты и все функции, потому что они документированы на сайте Node. Вместо этого я постараюсь рассмотреть важнейшие аспекты всех базовых модулей и конкретную функциональность Node, которая, на мой взгляд, осо- бенно важна для того, чтобы вы не уступали другим разработчикам Node. Ко- нечно, основной фактор успеха — практика, а эта книга — средство обучения. Перевернув последнюю страницу книги, вы сможете самостоятельно перейти к углубленному изучению конкретных типов функциональности, например работе с семейством технологий MEAN (Mongo-Express-Angular-Node). Ма- териал книги станет отправной точкой, от которой вы сможете пойти в любом из интересующих вас направлений Node.

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.