Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Node.js. Путеводитель по технологии

Покупка
Артикул: 486186.02.99
Доступ онлайн
439 ₽
В корзину
За последние несколько лет платформа Node.js стремительно повысила свой статус от экспериментальной технологии до основы для серьезных промышленных проектов. Тысячи программистов оценили возможность построения достаточно сложных, высоко нагруженных приложений на простом, элегантном и, самое главное, легковесном механизме. Все эти скучные слова правдивы, но на самом деле не это главное. Прежде всего Node.js — это совершенно увлекательная и захватывающая вещь, с которой по-настоящему интересно работать! Есть одна проблема — невозможно рассказывать про использование Node.js в отрыве от остальных технологий современной веб-разработки (и Highload-разработки). Я и не стал этого делать, дав обзор инструментов, без которых сегодня трудно обойтись. Прежде всего это чудесный язык JavaScript, и в книге рассказано о новинках в его последней и будущей спецификациях (EcmaScript 5 и 6). Кроме того, дается краткое введение в большинство связанных веб-технологий — от NoSQL-хранилищ данных (Memcached, MongoDB, Redis) до CSS-препроцессоров и MVC JavaScript-фреймворков. Конечно, эту книгу нельзя рассматривать как полноценный учебник по MongoDB, LESS или EcmaScript 6, Dart или CoffeScript, но в ней дано основное представление об этих довольно интересных вещах, вполне достаточное для начала работы.
Сухов, К. К. Node.js. Путеводитель по технологии : практическое руководство / К. К. Сухов. - 2-е изд. - Москва : ДМК Пресс, 2023. - 417 с. - ISBN 978-5-89818-328-8. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2102615 (дата обращения: 28.09.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Node.js.  
Путеводитель 
по технологии

Москва, 2023

К. К. Сухов

2-е издание, электронное

УДК 004.738.5:004.4Node.js
ББК 32.973.202-018.2
С91

С91
Сухов, Кирилл Константинович.
Node.js. Путеводитель по технологии / К. К. Сухов. — 2-е изд., эл. — 
1 файл pdf : 418 с. — Москва : ДМК Пресс, 2023. — Систем. требования: 
Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-328-8

За последние несколько лет платформа Node.js стремительно повысила свой статус от экспериментальной технологии до основы для серьезных промышленных 
проектов. Тысячи программистов оценили возможность построения достаточно 
сложных, высоко нагруженных приложений на простом, элегантном и, самое главное, 
легковесном механизме.
Все эти скучные слова правдивы, но на самом деле не это главное. Прежде всего 
Node.js — это совершенно увлекательная и захватывающая вещь, с которой по-настоящему интересно работать!
Есть одна проблема — невозможно рассказывать про использование Node.js в 
отрыве от остальных технологий современной веб-разработки (и Highload-разработки). Я и не стал этого делать, дав обзор инструментов, без которых сегодня трудно обойтись. Прежде всего это чудесный язык JavaScript, и в книге рассказано о 
новинках в его последней и будущей спецификациях (EcmaScript 5 и 6). Кроме того, 
дается краткое введение в большинство связанных веб-технологий — от NoSQL-хранилищ данных (Memcached, MongoDB, Redis) до CSS-препроцессоров и MVC 
JavaScript-фреймворков. Конечно, эту книгу нельзя рассматривать как полноценный 
учебник по MongoDB, LESS или EcmaScript 6, Dart или CoffeScript, но в ней дано 
основное представление об этих довольно интересных вещах, вполне достаточное 
для начала работы.

УДК 004.738.5:004.4Node.js 
ББК 32.973.202-018.2

Электронное издание на основе печатного издания: Node.js. Путеводитель по технологии / 
К. К. Сухов. — Москва : ДМК Пресс, 2015. — 416 с. — ISBN 978-5-97060-164-8. — Текст : непосредственный.

Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было 
форме и какими бы то ни было средствами без  письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических 
ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность 
приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.

В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты 
авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.

ISBN 978-5-89818-328-8
© Сухов К. К., 2015
© Оформление, издание, ДМК Пресс, 2015

Содержание

Благодарности........................................................... 9

Вступление..............................................................10
О Node.js ................................................................................................................................10
Об этой книге ......................................................................................................................10

Предыстория............................................................12
Веб-страница, веб-сервис, веб-приложение..............................................................12
Асинхронность как необходимость .............................................................................12
Решения – Twisted, Tornado и другие .........................................................................14

Странный.язык.–.JavaScript.........................................16
Волшебные замыкания ....................................................................................................17
Что такое замыкание? ..............................................................................................17
Применение замыканий ..........................................................................................19
ООП в JavaScript ................................................................................................................21
Явление Node .......................................................................................................................26

Хватит.теории!.Начало.работы.с.Node.js..........................27
Установка Node ...................................................................................................................27
Веб-сервер из пяти строк.................................................................................................29
Сайт на Node.js ....................................................................................................................32

Node.Core.................................................................37
Как все работает? Event loop в Node.js  ......................................................................37
Глобальные объекты (Globals) ......................................................................................37
Global .............................................................................................................................38
Объект Console ...........................................................................................................38
Require и псевдоглобальные объекты .................................................................39
Процессы ...............................................................................................................................40
Cвойства и методы объекта Process ....................................................................40
Метод process.nextTick() .........................................................................................42
Процессы ввода/вывода ..........................................................................................43
Signal Events ................................................................................................................44
Child Process – параллелизм в Node.js ........................................................................45
Понятие буфера ..................................................................................................................49
Таймеры .................................................................................................................................52

События...................................................................54
Слушаем! ...............................................................................................................................54
Объект EventEmitter .........................................................................................................56

 Содержание

Модули....................................................................58
Пакетный менеджер npm .................................................................................................59
Создаем собственный модуль ........................................................................................63
А теперь по-взрослому – пишем Си++  Addons ......................................................70

Работа.с.файлами......................................................75
В дебри файловой системы ............................................................................................75
Маленький полезный модуль – Path ..........................................................................81
Бродим по папкам ..............................................................................................................84
Работа с файлами – вот она, асинхронность ............................................................85
Читаем файлы .............................................................................................................85
Watching Files ..............................................................................................................88
Потоки – унифицируем работу с источниками данных ......................................90
ReadStream/WriteStream ........................................................................................90
Веб-сервер на потоках ..............................................................................................93

Сервер.HTTP,.и.не.только............................................95
Создаем TCP-сервер .........................................................................................................95
UDP – тоже полезный протокол ................................................................................104
Переходим на прикладной уровень – реализация HTTP ..................................106
IncomingMessage – входящий HTTP-запрос .................................................107
ServerResponse ..........................................................................................................108
HTTP-клиент (грабим Центробанк) ................................................................110
HTTPS – шифруемся! ....................................................................................................114
Запускаем HTTPS-сервер ....................................................................................115
И секретный клиент ................................................................................................115

WebSockets.–.стандарт.современного.веба..................118
Браузер – веб-сервер. Надо что-то менять ..............................................................118
WebSockets – окончательное решение? ...................................................................120
Простой способ – модуль ws ........................................................................................121
Начинаем работу с ws .............................................................................................121
Реализация WebSocket-чата ................................................................................123
Обмен бинарными данными ................................................................................127
Socket.io – webSockets для пролетариата ................................................................129
Реальное время для всех! ......................................................................................129
Начинаем работать с socket.io .............................................................................130
Простой чат на socket.io .........................................................................................132
Усложняем ..................................................................................................................134
Совершенствуем приложение – дополнительные возможности  
socket.io ........................................................................................................................136
Пространства имен ..................................................................................................140
«Летучие» сообщения ............................................................................................141
Извещения (acknowledgements) .........................................................................142
Конфигурация ..........................................................................................................142

Содержание  5

Пирамиды.судьбы.–.асинхронный.поток..
выполнения.и.как.с.ним.бороться...............................145
Начинаем строить пирамиды .......................................................................................146
Долой анонимость! ..........................................................................................................150
Node.js control-flow   ........................................................................................................151
Async – берем поток исполнения в свои руки .......................................................153
Инструменты async .................................................................................................153
Control Flow средствами async ............................................................................157
Живительный водопад (async.waterfall) ..........................................................161

Node.js.и.данные..Базы.данных..................................165

MySQL.и.Node.js......................................................166
Четыре буквы – CRUD ..................................................................................................167
Preparing Queries ..............................................................................................................168
Чтение, обновление и удаление данных ..................................................................169
Работа с пулом соединений ..........................................................................................171

ORM-система.Sequelize............................................173
Начинаем работать с Sequelize ....................................................................................173
CRUD на Sequelize ..........................................................................................................176
Связи ....................................................................................................................................179

NoSQL....................................................................182

NodeJS.и.Memcached...............................................183
Основы Memchashed .......................................................................................................183
Реализация  ........................................................................................................................184
Создаем приложение ......................................................................................................186
MemcacheDB – все-таки DB ........................................................................................190

Redis.–.очень.полезный.овощ....................................192
Redis – что он умеет? ......................................................................................................192
Основы работы с Redis ...................................................................................................193
Модуль Redis для Node.js ..............................................................................................194
Хэши (Hashes) ..........................................................................................................196
Множества (Sets) .....................................................................................................199
Упорядоченные множества (Sorted Sets) ........................................................201
Механизм Publish/Subscribe ........................................................................................202
Очередь сообщений с помощью Redis ......................................................................205

MongoDB:.JavaScript.–.он.везде!................................208
Для чего? .............................................................................................................................209
Основы работы с MongoDB .........................................................................................210
Native MongoDB ...............................................................................................................214

 Содержание

Рики-тики-тави: Mongoose для MongoDB ..............................................................219
Основы работы с Mongoose ..................................................................................220
CRUD по-мангустски .............................................................................................221
Сеттеры, гетттеры и прочие приятные вещи .................................................224

Переходим.на.сторону.клиента..................................226

Мыслим.шаблонами................................................227
Mustache – усатый и нелогичный ..............................................................................227
EJS – пришелец из мира RoR ......................................................................................232
Синтаксис EJS-шаблонов .....................................................................................233
Помощники (Helpers) ............................................................................................233
EJS и Node.js ..............................................................................................................234
Фильтры ......................................................................................................................237
Jade – нечто нефритовое ................................................................................................239
Начинаем работу с Jade .........................................................................................240
Include – собираем шаблон по частям ..............................................................247
Примеси ......................................................................................................................248

CSS-препроцессоры.–.решение.проблем.стиля............250
LESS – больше, чем Sass ................................................................................................250
Вложенные блоки ....................................................................................................251
Переменные ...............................................................................................................252
Операции и функции .............................................................................................253
Примеси ......................................................................................................................255
Расширения ...............................................................................................................257
Работаем с LESS в Node.js ....................................................................................257
Stylus .....................................................................................................................................260
Возьмем CSS и отсечем лишнее .........................................................................260
И тут примеси ...........................................................................................................262
Функции и переменные .........................................................................................263
Stylus и Node.js ..........................................................................................................267

Поднимаем.разработку.на.новый.уровень....................270
Чего нам не хватает? .......................................................................................................270

Connect.–.middleware.framework.для.node.js.................272
Что такое middleware? (и зачем все это?)................................................................272
Connect на практике ........................................................................................................273
Статический сайт одной строчкой (почти) ............................................................275
Совершенствуем сайт .....................................................................................................275
Пишем свое СПО .............................................................................................................278
Еще немного Connect......................................................................................................280

Веб-каркас.для.node.(node.js.web-framework'и)............282
Что такое web-framework? ............................................................................................282

Содержание  7

Express ..................................................................................................................................283
Начало работы c Express .......................................................................................283
Закат солнца вручную ............................................................................................285
Подключаем шаблонизатор .................................................................................289
Задействуем статику ...............................................................................................291
Подключаем CSS .....................................................................................................291
Разработка RESTFul-приложения на основе Express .........................................293
Немного о REST-архитектуре .............................................................................293
Приступаем к реализации RESTFul API ........................................................294
Подключаем источник данных ...........................................................................299
А теперь – на три буквы (на MVC) ............................................................................306
Немного об архитектуре MVC ............................................................................306
Структурируем код .................................................................................................307
Добавляем новую сущность .................................................................................313

Практика.разработки.приложений.Node.js...................316
Nodemon – друг разработчика .....................................................................................316
Отладка Node.js-приложений (debug-режим) .......................................................320
Node Inspector – отладка на стороне клиента ........................................................324

Тестирование.Node.js-приложений.............................325
Что такое Unit-тестирование? .....................................................................................325
TDD/BDD  .........................................................................................................................325
Accert – утвердительный модуль ...............................................................................326
Should – BDD-style тестовый фреймворк ...............................................................330
Цепочки утверждений ............................................................................................330
Chai – BDD/TDD-библиотека утверждений ........................................................335
Chai TDD-стиль .......................................................................................................335
Chai BDD ....................................................................................................................335
Mocha – JavaScript тест-фреймворк ..........................................................................336
Начинаем работать с Mocha .................................................................................337
Exports .........................................................................................................................340
QUnit ............................................................................................................................341
Асинхронный код ....................................................................................................341
Jasmine – ароматный BDD-фреймворк ....................................................................342
Основы работы с Jasmine ......................................................................................342
Jasmine и асинхронный код ..................................................................................345
Spies – шпионим и эмуллируем ..........................................................................346

Grunt.–.The.JavaScript.Task.Runner..............................349
Grunt – начало работы ...................................................................................................350
Инструменты Grunt ........................................................................................................352
Grunt watch – задача-наблюдатель ............................................................................359
Grunt connect web server ................................................................................................361

Альтернативы.JavaScript.и.Node.js..............................363
CoffeeScript – зависимость с первой чашки ...........................................................363

 Содержание

Краткий курс по кофе ............................................................................................364
Классы, наследование, полиморфизм, генераторы! ....................................367
CoffeScript и Node.js ................................................................................................368
Пишем сервер на CoffeScript ...............................................................................370
TypeScript – типа JavaScript от Microsoft ................................................................372
Node.js как TypeScript-компилятор ...................................................................373
Аннотации типов .....................................................................................................373
Классы! настоящие классы! .................................................................................374
Интерфейсы ...............................................................................................................376
Модули ........................................................................................................................377
Что еще? ......................................................................................................................378
Dart – дротик в спину JavaScript от Google  ...........................................................378
Экосистема Dart .......................................................................................................378
Знакомство с Dart ....................................................................................................382
ООП – чтим традиции!..........................................................................................383
Область видимости и библиотеки .....................................................................385
Изоляторы ..................................................................................................................386
А в общем-то... ...................................................................................................................387

Будущее.уже.сейчас.–.ECMAScript.next.и.Node.............388
ECMAScript 5 – уже стандарт .....................................................................................388
Всякие  строгоcти – Strict Mode в JavaScript ................................................388
JSON .............................................................................................................................390
Массивы ......................................................................................................................392
Объекты ......................................................................................................................394
Who’s Next? ECMAScript 6 ..........................................................................................399
ECMAScript 6 в браузерах и в Node.js ..............................................................400
Вот теперь настоящие классы! ............................................................................400
Модульная структура .............................................................................................402
Цикл for-of ..................................................................................................................403
Функции – let it block! ...........................................................................................403
Arrow function ...........................................................................................................404
Обещания ...................................................................................................................406
Proxy – займемся метапрограммированием на JavaScript  .......................407
Константы ..................................................................................................................409
Генераторы ..................................................................................................................409

Заключение.–.что.дальше?........................................412

Приложение.–.полезные.ресурсы.по.платформе..
Node.js..................................................................413

Список.литературы..................................................414

Предметный.указатель.............................................415

Благодарности

В первую очередь огромное спасибо Райану Далу, TJ Holowaychuk и 
другим разработчикам, подарившим мне отличный инструмент, благодаря которому я могу на своем любимом языке писать полноценные серверные приложения.
Огромное спасибо Дмитрию Мовчану, который буквально вынудил меня взяться за этот труд и поддерживал в процессе. Спасибо издательству «ДМК Пресс» и отдельно Галине Синяевой.
Спасибо редакции журнала «Системный администратор», Галине 
Положенец, Полине Гвоздь – без вас мне было бы очень трудно.
Особая благодарность тем, кто помогал мне в работе над книгой, – 
Александу Календареву, Валентину Синицину, Александру Слесареву, Алексею Вторникову.
Спасибо тем специалистам, советы и рекомендации которых помогли в работе над материалом. Это Дмитрий Бородин, Андрей Шетухин, Олег Царев, Илья Кантор, Евгений Зиндер, Борис Богданов, 
а также Константин Полянский, Александр Байрак, Артем Демин 
«and last but not least» – Андрей Бешков. Огромное спасибо Александру Смирнову и сообществу phpclub.ru.
Спасибо моему сыну Роману и моим друзьям за поддержку.
И самое главное спасибо – моей музе и невесте Лиде. Любимая, без 
твоего терпения и поддержки вообще бы ничего не состоялось.

Вступление

О Node.js

Node.js – это серверная JavaScript-платформа, предназначенная для 
создания масштабируемых распределенных сетевых приложений, 
использующая событийно-ориентированную архитектуру и неблокирующее асинхронное взаимодействие. Она основана на JavaScriptдвижке V8 и использует этот же JavaScript для создания приложений. 
Node.js хоть и достигла в своем развитии только цифр 0.10.30 в номере версии, но уже активно используется в реальных проектах.
Помимо эффектной асинхронной модели работы, неблокирующих 
процессов, высокой производительности, Node.js делает то, что считалось принципиально невыполнимым, – дает возможность разработчику создавать как server-side/backend-, так и frontend-приложения, 
пользуясь единой технологией! Да-да, теперь на JavaScript можно 
напи сать обработчик http-запросов, да что там, настоящий, полнофункциональный веб-сервер! Можно работать с SQL- (и NoSQL-) 
базами данных, сетью, файловой системой. Еще недавно все это казалось труднодостижимым. 
На самом деле, чего там скрывать, когда 5 лет назад новая технология только появилась, автору этих строк и многим его коллегам она 
казалась забавной игрушкой – интересной, но без шансов промышленного применения. Я рад, мы ошибались – Node.js доказала свою 
состоятельность, и сейчас её «боевое» использование – не экзотика, 
а нормальная практика, особенно в пресловутых высоконагруженных 
проектах. Node.js сейчас тем или иным образом используют такие известные участники IT-рынка, как Groupon, SAP, LinkedIn, Microsoft, 
Yahoo!, Walmart, PayPal. По-моему, достойная компания, к которой не 
грех присоединиться.

Об этой книге

Мне всегда нравились рассказы о новых технологиях, тесно завязанные на практические примеры, на реальный, работающий код. И сам я 
попытался создать нечто подобное. В книге не слишком много общих 
фраз, но очень много кода и пояснений к нему. 
Сначала, после небольшого вводного обзора, мы установим Node.js,  
начнем работу и даже, с места в карьер, напишем первый Node.js-сайт 
(это не займет много времени). Далее мы подробно познакомимся 

Доступ онлайн
439 ₽
В корзину