Jump to ratings and reviews
Rate this book

LEARNING NODE

Rate this book
About the Book: Learning Node Take your web development skills from browser to server withNode-and learn how to write fast, highly scalable networkapplications on this JavaScript-based platform. With this hands-onguide, youll quickly master Nodes core fundamentals, gainexperience with several built-in and contributed modules, and learnthe differences and parallels between client- and server-sideprogramming. Get up to speed on Nodes event-driven, asynchronous I/O modelfor developing data-intensive applications that are frequentlyaccessed but computationally simple. If youre comfortable workingwith JavaScript, this book provides numerous programming anddeployment examples to help you take advantage of server-sidedevelopment with Node. Explore Nodes unique approach to asynchronous development Build sample Node applications with the Express framework andConnect middleware Use NoSQL solutions such as Redis and MongoDB-and explore Nodesrelational database modules Work with PDF files, serve HTML5 media, and create graphics withCanvas Set up bidirectional communication between browser and serverwith WebSockets Learn in-depth practices for debugging and testing yourapplications Deploy Node applications in the cloud or on your own system Contents Chapter 1 Node.js: Up and Running Chapter 2 Interactive Node with REPL Chapter 3 The Node Core Chapter 4 The Node Module System Chapter 5 Control Flow, Asynchronous Patterns, and ExceptionHandling Chapter 6 Routing Traffic, Serving Files, and Middleware Chapter 7 The Express Framework Chapter 8 Express, Template Systems, and CSS Chapter 9 Structured Data with Node and Redis Chapter 10 Node and MongoDB: Document-Centric Data Chapter 11 The Node Relational Database Bindings Chapter 12 Graphics and HTML5 Video Chapter 13 WebSockets and Socket.IO Chapter 14 Testing and Debugging Node Applications Chapter 15 Guards at the Gate Chapter 16 Scaling and Deploying Node Applications Appendix Node, Git, and GitHub Colophon About the Author: S

412 pages, Paperback

First published January 1, 2012

54 people are currently reading
116 people want to read

About the author

Powers

114 books

Ratings & Reviews

What do you think?
Rate this book

Friends & Following

Create a free account to discover what your friends think of this book!

Community Reviews

5 stars
18 (15%)
4 stars
52 (43%)
3 stars
42 (35%)
2 stars
4 (3%)
1 star
3 (2%)
Displaying 1 - 12 of 12 reviews
Profile Image for Oleksandr Golovatyi.
501 reviews42 followers
September 5, 2025
fast reading exercises (promo)

Book notes:

“Версию Node можно проверить следующей командой: node -v”

“Объект process предоставляет доступ к информации как о среде Node, так и о среде выполнения программы. Для получения информации мы воспользуемся параметром командной строки -p, который выполняет сценарий и возвращает полученный результат”

“Node поддерживает чтение и запись 8-, 16- и 32-разрядных целых чисел со знаком и без, а также вещественных чисел одинарной и двойной точности. Для всех типов, кроме 8-разрядных целых чисел, также можно выбрать формат с прямым (little-endian) или обратным (big-endian) порядком байтов. Несколько примеров поддерживаемых функций: 1) buffer.readUIntLE(): чтение значения с заданным смещением и прямым порядком байтов. 2) buffer.writeUInt16BE(): запись 16-разрядного целого без знака с заданным смещением и обратным порядком байтов. 3) buffer.readFloatLE(): чтение вещественного числа одинарной точности с заданным смещением и прямым порядком байтов. 4) buffer.writeDoubleBE(): запись 64-разрядного вещественного числа двойной точности с заданным смещением и обратным порядком байтов.”

“Но если вы интересуетесь разработкой дополнений для Node, вам придется очень близко познакомиться с libuv. Начать можно с введения в libuv (https://nikhilm.github.io/uvbook/basi...).”

“Стоит немного поскрести многие базовые объекты Node, и под оболочкой обнаружится EventEmitter. Каждый раз, когда вы видите объект, генерирующий событие, которое обрабатывается функцией on, знайте: перед вами EventEmitter. Понимание того, как работает класс EventEmitter, и умение его использовать — две важнейшие составляющие программирования для Node… Класс EventEmitter обеспечивает асинхронную обработку событий в Node.”

“В браузере для работы с таймерами существуют setTimeout() и setInterval(); эти функции также доступны и в Node. Они не совсем равноценны, потому что браузер использует цикл событий, реализуемый на уровне ядра браузера, а цикл событий Node реализуется библиотекой C++, libuv, но в основном различия между ними несущественны.”

“Функция setImmediate() создает событие, но это событие имеет более высокий приоритет, чем события, созданные setTimeout() и setInterval(). Однако при этом оно не превосходит по приоритету события ввода/вывода и с ним не связывается собственный таймер. Событие setImmediate() генерируется после всех событий ввода/вывода, до событий таймера, и в текущей очереди событий. Если вызвать его из функции обратного вызова, то оно помещается в следующий цикл событий после завершения того цикла, в котором оно было вызвано. Фактически эти функции позволяют добавить событие в текущий или в следующий цикл событий без лишних таймеров. Этот способ эффективнее setTimeout(callback, 0), потому что он превосходит по приоритету другие события таймеров. Он похож на другую функцию — process.nextTick(), не считая того, что функция обратного вызова process.nextTick() активизируется после завершения текущего цикла событий, но до добавления каких-либо новых событий ввода/ вывода”

“REPL — удобный интерактивный инструмент, который облегчает разработчику жизнь. REPL позволяет не только опробовать код JavaScript перед включением его в файлы, но и создавать приложения в интерактивном режиме, с сохранением результатов после завершения работы. Другая полезная особенность REPL — возможность создания специализированной версии REPL, способной исключать нежелательные ответы undefined, осуществлять предварительную загрузку модулей, изменять приглашение или используемую функцию eval и делать многое другое.”

“Так как многие объекты в Node реализуют потоковый интерфейс, все потоки в Node обладают базовой функциональностью: 1) Изменение кодировки потоковых данных вызовом setEncoding. 2) Проверка возможности чтения и (или) записи данных в поток. 3) Перехват событий потоков (например, получения данных или закрытия подключения) с назначением функций обратного вызова для каждого события. 4) Приостановка и возобновление потока. 5) Перенаправление данных из потока для чтения в поток для записи.”

“Модуль Node File System (fs) предоставляет всю функциональность, необходимую для работы с файловой системой независимо от операционной системы.”

“Кроме многочисленных функций, модуль File System поддерживает четыре класса: 1) fs.FSWatcher — поддержка событий для отслеживания изменений в файле. 2) fs.ReadStream — поток для чтения. 3) fs.WriteStream — поток для записи. 4) fs.Stats — информация, возвращаемая функциями *stat.”

“Объект fs.Stats возвращается при использовании функций fs.stat(), fs.lstat() и fs.fstat(). Он может использоваться для проверки существования файла (или каталога), но также возвращает информацию о том, является ли объект файловой системы файлом/каталогом/сокетом домена UNIX, какие разрешения связаны с файлом, время последнего обращения или модификации объекта и т. д”

“fs.readFile() или fs.writeFile() (или их синхронные аналоги). Эти функции открывают файл, выполняют чтение или запись, после чего закрывают файл”

“Поток для чтения создается вызовом fs.createReadStream() с передачей пути и объекта options или же с включением описания файла в options без указания пути. То же можно сказать о потоках для записи, создаваемых вызовом fs.createWriteStream(). В обоих случаях поддерживается объект options.”

“Сокет (socket) представляет собой конечную точку обмена данными, а сетевой сокет — конечную точку обмена данными между приложениями, работающими на двух разных компьютерах в сети. Данные, передаваемые между сокетами, образуют поток (stream). Данные в потоке могут передаваться либо в виде двоичных данных в буфере, либо в виде строки в кодировке Юникод. Оба типа данных передаются в форме пакетов: частей данных, разделенных на блоки сходного размера. Также существует специальная разновидность пакетов — завершающий пакет (FIN), отправляемый сокетом как сигнал о завершении передачи.”

“TCP требует выделенного соединения между двумя конечными точками. UDP — протокол, не требующий соединения; это означает, что соединение между двумя конечными точками не гарантировано. По этой причине протокол UDP по надежности и степени защиты от ошибок уступает TCP. С другой стороны, UDP обычно работает быстрее TCP, что делает его более популярным для задач реального времени и таких технологий, как VoIP (Voice over Internet Protocol), в которых требования к соединению TCP могут отрицательно повлиять на качество сигнала.”

“Безопасный, защищенный от несанкционированного вмешательства обмен данными между клиентом и сервером осуществляется через протокол SSL (Secure Sockets Layer) и его обновленный вариант TLS (Transport Layer Security). Уровень TLS/SSL реализует шифрование данных для протокола HTTPS, который будет рассмотрен в следующем разделе. Но прежде чем браться за программирование для HTTPS, необходимо подготовить среду разработки”

“Node предоставляет криптографический модуль Crypto, открывающий интерфейс к функциональности OpenSSL. В него включены обертки для функций хеширования OpenSSL, HMAC, шифрования, дешифрования, подписи и верификации. Этот компонент Node достаточно прост в использовании, но он основан на предположении, что разработчик Node хорошо знает OpenSSL и все используемые функции”

“В самом распространенном используется метод spawn. Он запускает команду в новом процессе, передавая ей любые аргументы. Между родительским приложением и дочерним процессом создаются каналы (pipes) для stdin, stdout и stderr”

“Кроме порождения дочернего процесса функцией child_process.spawn(), для выполнения команды также можно воспользоваться функциями child_ process.exec() и child_process.execFile(). Метод child_process.exec() похож на child_process.spawn(), не считая того, что spawn() начинает возвращать поток сразу же после запуска программы, как видно из листинга 8.1. Функция child_process.exec(), как и child_process. execFile(), буферизирует результаты. Однако exec() порождает командный интерпретатор для управления приложением, тогда как child_process. execFile() запускает процесс напрямую. Это делает функцию child_process. execFile() более эффективной по сравнению как с child_process.spawn() с включенным режимом shell, так и с child_process.exec(). В первом параметре child_process.exec() или child_process.execFile() передается либо команда (для exec()), либо файл и его местоположение (execFile()); второй параметр содержит объект options для команды; в третьем параметре передается функция обратного вызова. Функция обратного вызова получает три аргумента: error, stdout и stderr. При отсутствии ошибок данные буферизируются в stdout.”

“Последний метод дочерних процессов — child_process.fork(). Эта разновидность spawn() предназначена для порождения процессов Node. Вызов child_process.fork() отличается от других тем, что он создает реальный канал передачи данных дочернему процессу. Однако обратите внимание на то, что каждому процессу требуется новый экземпляр V8, а это приводит к дополнительным затратам времени и памяти.”

“Строгий режим сильно влияет на работу кода. В частности, он выдает ошибки, если переменная не определяется перед использованием; параметр функции может объявляться только единожды; переменная не может использоваться в eval-выражении на одном уровне с вызовом eval, и т. д”

“MongoDB — самая популярная база данных, используемая в приложениях Node. Эта система относится к категории документных баз данных. Документы кодируются в формате BSON — двоичной разновидности JSON (что, вероятно, объясняет его популярность среди разработчиков JavaScript). В MongoDB место записи таблицы занимает документ BSON, а место таблицы — коллекция.”

“Объект MongoClient — тот объект, который вы будете использовать чаще всего для подключения к базе данных. Обратите внимание на заданный номер порта (27017): это порт по умолчанию для системы MongoDB”

“Memcached в основном используется для кэширования запросов к данным, чтобы ускорить последующие обращения к ним. Система также хорошо справляется с распределенным кэшированием, но поддержка более сложных данных в ней ограничена. Она хорошо работает в приложениях, выдающих большое количество запросов на выборку, но не столь эффективно проявляет себя в приложениях с многочисленными операциями чтения и записи. Redis — отличный вариант для приложения второго типа. Кроме того, данные Redis могут сохраняться, и система обладает большей гибкостью, чем Memcached, — особенно в поддержке различных типов данных. Однако, в отличие от Memcached, Redis работает только на одной машине.”

“Те же факторы следует учитывать при сравнении Redis с Cassandra. В Cassandra, как и в Memcached, реализована поддержка кластеров. С другой стороны, как и в Memcached, поддержка структур данных в Cassandra ограничена. Система хорошо подходит для выдачи ситуативных запросов — сценарий использования, плохо подходящий для Redis. С другой стороны, система Redis проста в использовании, незатейлива и обычно работает быстрее Cassandra. По этим и другим причинам система Redis пользуется большей популярностью среди разработчиков Node.”

“Чтобы установить точку прерывания в коде, вставьте команду debugger прямо в код”

“Чтобы приступить к отладке приложения, укажите параметр debug при запуске приложения: node debug application”

“Модульное тестирование — метод изоляции компонентов приложения для тестирования. Многие тесты, содержащиеся в подкаталоге tests модулей Node, являются модульными. Все тесты в подкаталоге test установки Node тоже являются модульными. Многие из этих тестов были построены с использованием модуля Assert”

“Тестовые утверждения проверяют значение некоторых выражений; конечным результатом такой проверки является логическое значение true или false.”

“Nodeunit предоставляет способ сценарного программирования тестов. Все запрограммированные тесты выполняются последовательно, а вывод результатов координируется. Чтобы использовать модуль Nodeunit, установите его глобально с использованием npm: [sudo] npm install nodeunit -g”

best free sudoku app without ads iphone (promo)
Profile Image for Satbir.
7 reviews
January 20, 2015
This book could have been done better. Although there were scattered examples all over, I would have preferred if the book was divided into bigger projects. Also details were missing which would go into building a big application. All in all, a nice introduction, but would need more to build an actual application. That's where Developing Backbone.js Application By Addy Osmani shined.
Profile Image for Horst Gutmann.
32 reviews9 followers
May 4, 2013
The actual introduction to Node.js is IMO quite well written, but the author wastes white a lot of space introducing for instance technologies like MongoDB and Redis when one example for a datastore would be enough to show the point of persistent storage. This and some other aspects made me skim through whole chapters :-/ There is also a multi-page appendix on how to use Git and Github ... Quite a WTF moment.
Profile Image for Katherine.
149 reviews
May 11, 2014
There are some things written here which I have figured out easily by googling a year ago. But thankfully, it's not entirely true.

I was looking for a book that teaches you how to build one simple and fairly complex application. There's no cohesive story here. The author simply introduced Node libraries and somehow reading the last 9 chapters felt like reading a documentation page.
Profile Image for Chitrank Dixit.
37 reviews2 followers
December 17, 2018
Nice book to start learn Node.js and the best features that comes with it, Although most are inherited from JavaScript and some of us already know them, but how you can harness those feature using Nodejs are well explained. Some content gets outdated, but you can surf and update yourself. Overall a very nice read.
Profile Image for David Cross.
Author 3 books5 followers
July 21, 2017
Nothing really wrong with this book, it just wasn't really what I wanted. Turns out, I needed to read the first couple of chapters and the last three or four. The big chunk in the middle really wasn't interesting to me.
Profile Image for Tom.
4 reviews
March 29, 2013
JavaScript outside of the browser? Blasphemy, you say? Nope, it's true and you need to read this.
Profile Image for Russell Myers.
5 reviews
May 24, 2017
Decent introduction into Node

The book was a breadth, not depth, look at NodeJS. It's a good read to at least understand terminology and options for a variety of use cases.
Profile Image for Maxim Proskurnia.
2 reviews
January 8, 2018
Really good book! Provides a lot of comprehensive usage examples and covers a wide range of Node's functionality including such rarely mentioned topics as IoT and microcomputers.
Profile Image for Ahmad Muhardian.
48 reviews1 follower
September 18, 2018
Penjelasannya lengkap, dari awal sampai testing. Tapi kurang bisa saya pahami, karena tidak mejelaskan step-by-step.
Displaying 1 - 12 of 12 reviews

Can't find what you're looking for?

Get help and learn more about the design.