rpilot62.ru для начинающих » Подробный учебник по rpilot62.ru

Вашему вниманию предлагается скринкаст по Node.JS на русском языке.

Его целью не является разбор всех-всех возможностей и модулей Node.JS, ведь многие из них используются очень редко.

С другой стороны, мы очень подробно разберём основные возможности и средства создания веб-сервисов, включая внутренние особенности самого сервера Node.JS, важные для его работы.

Если вы – разработчик, то вам наверняка известно: большинство полезной документации и скринкастов делается на английском.

Конечно, даже на английском много всего устаревшего, приходится порыться, но на русском – всё гораздо хуже. Многого просто нет. Хотелось бы поменять эту ситуацию, хотя бы в плане Node.JS.

Часть 1: Изучаем Node.JS

Выпуски были записаны для Node 0.10.

Каждую запись можно просмотреть или скачать в низком и хорошем качестве.

  1. Введение в Node.JS, об этом скринкасте
  2. Что такое Node.JS? Почему Node.JS?
  3. Установка и запуск
  4. Исходники и документация
  5. Модули для Node.JS
  6. Приёмы работы с модулями
  7. Введение в NPM — менеджер пакетов для Node.JS
  8. Структура пакета NPM
  9. Глобальные модули
  10. Модуль util и наследование
  11. Модуль console
  12. Наследование от ошибок Error
  13. События, EventEmitter и утечки памяти
  14. Node.JS как веб-сервер
  15. Эхо-сервер на Node.JS
  16. Документация к модулю http
  17. Разработка, supervisor
  18. Отладка скриптов под Node.JS
  19. Логирование, модули debug и winston
  20. Введение в асинхронную разработку
  21. Событийный цикл, библиотека libUV
  22. Таймеры, process.nextTick, ref/unref
  23. Работа с файлами, модуль fs
  24. Безопасный путь к файлу в fs и path
  25. Потоки данных в Node.JS, fs.ReadStream
  26. Writable поток ответа res, метод pipe
  27. Чат через long-polling, чтение POST
  28. Домены, «асинхронный try..catch»
  29. Чтение параметров из командной строки и окружения

Часть 2: Создаём приложение

В этой части разные технологии и внешние модули, используемые при NodeJS-разработке будут описаны в контексте создания веб-приложения.

Веб-приложение – сайт с чатом, посетителями, базой данных и авторизацией.

  1. Создаём костяк сайта / Express: основы и Middleware
  2. Улучшаем костяк сайта / Логгер, конфигурация, шаблонка для HTML
  3. Улучшаем шаблонизацию / EJS: layout, block, partials
  4. Начинаем работать с базой / Основы MongoDB, native driver
  5. Создаём модель для пользователя / Основы Mongoose
  6. Делаем скрипт для создания тестовой базы / Async, организация кода [обновлено]
  7. Веб-сервисы, работа с ошибками / Express, Mongoose
  8. Сессии, отслеживание посетителей /Express/
  9. Авторизация /Express, Mongoose, Async, EJS/
  10. COMET: обзор подходов / WS.JS, Sock.JS, Socket.IO
  11. Чат на Express и Socket.IO
  12. Опции Socket.IO и автореконнект
  13. Socket.IO + Express + авторизация

Дополнительно:

Код

Код к большинству выпусков находится в здесь: https://github.com/iliakan/nodejs-screencast, его также можно скачать и в виде zip-файла.

Ответы на частые вопросы:

У меня Windows, пытаюсь запустить скрипт в , набираю — выдаёт ошибку, что делать?
Перейдите в нужную директорию командой .

Например: . Оттуда и запускайте.

Пробую запускать в FAR, но не вижу вывода скрипта.
Нажмите , это отключит панели FAR и вы сможете всё видеть. Нажмите ещё раз — и панели снова появятся.

Следите за обновлениями javascript.ru

Вторая часть записана с версией фреймворка express 3, сейчас уже express 4.

Устаревшие фичи express3 в скринкасте не используются, так что это единственное существенное отличие – в express 4 многие библиотеки вынесены отдельно из фреймворка, см. Migrating from 3.x to 4.x. Если вы хотите следовать скринкасту, то рекомендуется , переход на 4 будет для вас очевиден.

Вторую часть можно использовать и в качестве основы для перехода к более современным фреймворкам, таким как KoaJS.

Руководство по Node.js для начинающих

Сейчас нет недостатка в обучающих материалах по Node.js, но большинство из них охватывают либо какие-то конкретные варианты использования, либо темы, применимые уже тогда, когда у вас есть работающий Node.js То тут, то там я вижу комментарии вроде «я скачал Node.js, что теперь?». Статья ответит на этот вопрос и объяснит, как начать с самого начала.

Что есть Node.js?

Много путаницы у новичков в Node.js возникает из-за непонимания того, что же на самом деле это такое. И описание на nodejs.org не слишком помогает разобраться.

Важно понять, что Node — это не веб-сервер. Сам по себе он ничего не делает. Это не Apache.

Там нет конфиг-файла, в котором указывается путь до HTML-файлов. Если вам нужен HTTP-сервер, вам нужно написать HTTP-сервер (с помощью встроенных библиотек). Node.js — это просто ещё один способ выполнять код на вашем компьютере. Это просто среда для выполнения JavaScript.

Установка Node

Установить Node.js очень просто. Если вы используете Windows или Mac, установочные файлы доступны на странице загрузки.

Я установил Node, что теперь?

Сразу после установки вам становится доступна новая команда . Её можно использовать двумя разными способами. Первый способ — без аргументов. Откроется интерактивная оболочка (REPL: read-eval-print-loop), где вы можете выполнять обычный JavaScript-код.

В примере выше я написал в оболочке и нажал Enter. Node.js выполнит этот код, и мы увидим сообщение. после него выводится потому, что оболочка отображает возвращаемое значение каждой команды, а ничего не возвращает.

Кроме того, мы можем передать Node файл с JavaScript для выполнения. Именно так вы и будете практически всегда делать.

hello.js

Теперь запустим его в терминале:

В этом примере я переместил в файл, который затем передал команде в качестве аргумента. Node затем запускает JavaScript из этого файла и выводит .

Делаем что-нибудь полезное — работа с файлами

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

example_log.txt

Неважно, что означают данные в логах, но по существу каждое сообщение содержит дату, букву и значение. Допустим, я хочу просуммировать значения для каждой буквы.

Сперва нам нужно считать содержимое файла.

my_parser.js

Работать с файлами в Node.js очень просто благодаря встроенному модулю файловой системы. Этот модуль содержит функцию readFile, принимающую в качестве аргументов путь до файла и коллбэк. Коллбэк вызовется, когда завершится чтение файла. Данные из файла поступают в виде объекта типа Buffer, по сути представляющего собой массив байтов. Мы можем перевести его в строку с помощью функции toString().

Теперь давайте займёмся обработкой логов. Это вполне себе обычный код JavaScript, поэтому я не буду вдаваться в детали.

my_parser.js

Теперь, когда вы передадите этот файл в качестве аргумента, он выведет результат и завершит работу.

Я часто использую Node.js для таких задач. Это простая и мощная альтернатива bash-скриптам.

Асинхронные коллбэки

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

Это особенно важно для веб-серверов. Доступ к базам данных в современных веб-приложениях — обычное дело. Пока вы ждёте ответа от базы, Node.js может обработать ещё запросы. Это позволяет вам обрабатывать тысячи одновременных соединений с очень маленькими затратами, сравнимыми с созданием отдельного потока для каждого соединения.

Делаем что-нибудь полезное — HTTP-сервер

Как я уже говорил ранее, Node.js не делает ничего «из коробки». Один из встроенных модулей позволяет без особых усилий создать простой HTTP-сервер, указанный в примере на сайте Node.js.

my_web_server.js

Когда я говорю, «простой», это значит «простой». Это не навороченный HTTP-сервер. Он не работает с HTML или изображениями. Фактически, что бы вы ни запросили, он вернёт . Тем не менее, можете запустить его, зайти на в браузере и увидеть этот текст.

Возможно, вы заметите небольшую разницу: ваше приложение не завершает работу. Так происходит потому, что вы создали сервер, и теперь он будет продолжать работать и отвечать на запросы до тех пор, пока вы не убьёте node сами.

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

Делаем что-нибудь полезное — Express

Express — это фреймворк, делающий создание большинства сайтов очень простым. Первое, что вам нужно будет сделать — установить его. Вместе с командой у вас появилась команда . Этот инструмент даёт вам доступ к колоссальному количеству модулей, созданных сообществом, и Express как раз один из них.

Установленный модуль расположится в папке внутри каталога с вашим приложением. Оттуда вы сможете подключать его так же, как любой встроенный модуль. Давайте создадим с помощью Express простой сервер, отдающий статику.

my_static_file_server.js

Теперь у вас есть довольно мощный сервер для статического контента. Всё, что вы сложите в папку , может быть запрошено из браузера и будет отображено. HTML, изображения, почти всё, что душе угодно. Например, если вы положите изображение с именем в эту папку, его можно будет запросить по адресу . Разумеется, у Express намного больше возможностей, но их вы можете открыть для себя, продолжив изучение самостоятельно.

NPM

Мы уже немного ознакомились с npm в предыдущем разделе, но я хотел бы подчеркнуть важность этого инструмента в контексте разработки на Node.js.

Вам доступны тысячи модулей, решающих практически все типичные задачи, с которыми вы, возможно, столкнётесь. Не забывайте проверить существующие модули перед тем, как изобретать велосипед. Для приложения на Node.js нормально иметь массу зависимостей.

В предыдущем примере мы установили Express вручную. Если у вашего проекта много зависимостей, то устанавливать их таким образом не очень удобно, поэтому npm использует файлы .

package.json

Файл package.json содержит общие сведения о вашем приложении. Он может содержать множество настроек, но выше указан необходимый минимум. Секция описывает имя и версию модулей, которые вы хотите установить. В данном случае подойдёт любая версия Express 3.3. Вы можете перечислить в этой секции столько зависимостей, сколько захотите.

Теперь вместо установки зависимостей по одной мы можем установить все сразу командой:

При запуске этой команды npm будет искать package.json в текущей директории, и если найдёт, то установит каждую указанную в нём зависимость.

Организация кода

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

Давайте проведем рефакторинг скрипта, обрабатывающего логи. Его будет легче поддерживать и тестировать, если мы выделим логику парсера в отдельный файл.

parser.js

Я создал новый файл, содержащий логику для парсинга. Это просто JavaScript, и существует множество способов инкапсуляции этого кода. Я предпочитаю заводить новый объект, потому что так легче проводить юнит-тестирование.

Важная часть в этом коде — строка с . Она объясняет Node.js, что вы выносите из этого файла. В данном случае я выношу конструктор, чтобы пользователи могли создавать экземпляры моего объекта . Вы сможете выносить то, что сами захотите.

Давайте теперь посмотрим, как импортировать этот файл и использовать новый объект .

my_parser.js

Файлы подключаются точно так же, как и модули, за исключением того, что вместо имени модуля нужно писать путь.

Расширение подразумевается по умолчанию, так что можете опустить его, если хотите.

Так как я вынес в модуль конструктор, то он и вернётся выражением . Теперь я могу создавать экземпляры и использовать их.

Итог

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

Я хочу, чтобы вы запомнили, что в Node.js всё зависит исключительно от вашего воображения. Встроенные библиотеки достаточно тщательно продуманы, чтобы вписываться в любую картину. Используйте их вместе с модулями, доступными в npm, и вы удивитесь, как быстро сможете разрабатывать сложные приложения.

.

Добавить комментарий

Закрыть меню