За последние несколько лет платформа Node.js стремительно повысила свой статус от экспериментальной технологии до основы для серьезных промышленных проектов. Тысячи программистов оценили возможность построения достаточно сложных, высоко нагруженных приложений на простом, элегантном и, самое главное, легковесном механизме.
Все эти скучные слова правдивы, но на самом деле не это главное. Прежде
в отрыве от остальных технологий совремсной веб-разработки (и Highload·paзработки). Я и не стал этого делать, дав обзор инструментов, без которых сегодня трудно обойтись. Прежде всего, это чудесный язык javaScript, и в книге рассказано о новинках в его последней и будущей спецификациях (EcmaScript 5 и б). Кроме того, дается краткое введение в большинство связанных веб-технологий – от NоSQL-хранилищ данных (Memcached, MongoDB, Redis) до СSS·препроцессоров и MVC JаvаSсriрt-фреймворков. Конечно, эту книгу нельзя рассматривать как полноценный учебник по MongoDB, LESS 11л11 EcmaScript б, Dart или CoffeScript, но в ней дано основное представление об этих довольно интересных вещах, вполне достаточное для начала работы.
Благодарности 9
Вступление 10
О Node.js 10
0б этой книге 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
Свойства и методы объекта 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
Сервер НПР, и не только 95
Создаем ТСР-сервер 95
UDP - тоже полезный протокол 104
Переходим на прикладной уровень - реализация НТТР 106
IncomingMessage - входящий НТТР-запрос 107
Server Response 108
НТТР-клиент (грабим Центробанк) 110
НТТРS - шифруемся 14
Запускаем НТТРS-сероср 115
И секретный клиент 115
WebSockets - стандарт современного веба 118
Браузер- веб-сервер. Надо что-то менять 118
WebSockets - окончательное решение? 120
Простой способ - модуль ws 121
Начинаем работу с ws 121
Реализация WebSocket-чaтa 123
Обмен бинарными данными 127
Sockct.io - webSockets для пролетариата 129
Реальное время для всех! 129
Начинаем работать с socket.io 130
Простой чат на socket.io 132
Усложняем 134
Совершенствуем приложение - дополнительные возможности socket.io 136
Пространства имен 140
«Летучие» сообщения 141
Извещения ( acknowledgements) . 142
Конфигурация 142
Пирамиды судьбы - асинхронный поток выполнения и как с ним бороться 145
Начинаем строить пирамиды 146
Долой анонимость! 150
Node.js control-flow 151
Async -берем поток исполнения в свои руки 153
Инструменты async 153
Control Flow средствами async 157
Жив11тельный водопад (async.waterfall) 161
Node.js и данные. Базы данных . 165
MySQL и Node.js 166
Четыре буквы - CRUD 167
Preparing Queries 168
Чтение, обновление и удаление данных 169
Работа с пулом соединений 171
ОRМ-система 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
Синтаксис ЕJS-шаблонов 233
Помощники (Helpers) 233
EJS и Node.js 234
Фильтры 237
Jade - нечто нефритовое 239
Начинаем работу cjade 240
Include - собираем шаблон по частям 247
Примеси 248
СSS-препроцессоры - решение проблем стиля 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
Express 283
Начало работы с Express 283
Закат солнца вручную 285
Подключаем шаблонизатор 289
Задействуем статику 291
Подключаем CSS 291
Разработка RЕSТFul-приложения на основе Express 2 93
Немного о RЕSТ-архитектуре 293
Приступаем к реализации RESTFul API 294
Подключаем источник данных 299
А теперь - на три буквы (на MVC) 306
Немного об архитектуре MVC 306
Структурируем код 307
Добавляем новую сущность 313
Практика разработки приложений Node.js 316
Nodemon - друr разработчика 316
Отладка Nоdе.js-приложений (dеЬug-режим) 320
Node Inspector - отладка на стороне клиента 324
Тестирование Nоdе.js-приnожений 325
Что такое Unit-тестирование? 325
TDD/BDD 325
Accert - утвердительный модуль 326
Should - BDD-style тестовый фреймворк 330
Цепочки утверждений 330
Chai - ВDD/ТDD-библиотека утверждений 335
Chai ТDD-стиль 335
Chai BDD 335
Mocha - JavaScript тест-фреймворк 336
Начинаем работать с Mocha 337
Exports 340
QUnit 341
Асинхронный код 341
Jasmine - ароматный ВDD-фреймворк 342
Основы работы c 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
CoffceScript - зависимость с первой чашки 363
Краткий курс по кофе 364
Классы, наследование, полиморфизм, генераторы! 367
CoffeScript и Node.js 368
Пишем сервер на CoffeScript 370
TypeScript – типa javascript от Microsoft 372
Node.js как ТуреSсriрt-компилятор 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
Всякие строгости - 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 bосk! 403
Arrow function 404
Обещания 406
Proxy - займемся метапрограммирование нa javaScript 407
Ко11станты 409
Генераторы 409
Заключение - что дальше? 412
Приложение - полезные ресурсы по платформе Node.js 41 З
Список литературы 414
Предметный указатель 415