Node.js. Путеводитель по технологии
Покупка
Тематика:
Web-технологии. Web-дизайн
Издательство:
ДМК Пресс
Автор:
Сухов Кирилл Константинович
Год издания: 2023
Кол-во страниц: 417
Дополнительно
Вид издания:
Практическое пособие
Уровень образования:
Профессиональное образование
ISBN: 978-5-89818-328-8
Артикул: 486186.02.99
За последние несколько лет платформа Node.js стремительно повысила свой статус от экспериментальной технологии до основы для серьезных промышленных проектов. Тысячи программистов оценили возможность построения достаточно сложных, высоко нагруженных приложений на простом, элегантном и, самое главное, легковесном механизме. Все эти скучные слова правдивы, но на самом деле не это главное. Прежде всего
Node.js — это совершенно увлекательная и захватывающая вещь, с которой по-настоящему интересно работать! Есть одна проблема — невозможно рассказывать про использование Node.js в отрыве от остальных технологий современной веб-разработки (и Highload-разработки). Я и не стал этого делать, дав обзор инструментов, без которых сегодня трудно обойтись. Прежде всего это чудесный язык JavaScript, и в книге рассказано о новинках в его последней и будущей спецификациях (EcmaScript 5 и 6). Кроме того, дается краткое введение в большинство связанных веб-технологий — от NoSQL-хранилищ данных (Memcached, MongoDB, Redis) до CSS-препроцессоров и MVC
JavaScript-фреймворков. Конечно, эту книгу нельзя рассматривать как полноценный учебник по MongoDB, LESS или EcmaScript 6, Dart или CoffeScript, но в ней дано основное представление об этих довольно интересных вещах, вполне достаточное для начала работы.
- Полная коллекция по информатике и вычислительной технике
- Web-технологии. Web-дизайн
- Веб-разработка
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
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-сайт (это не займет много времени). Далее мы подробно познакомимся