Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development

Node.js для начинающих

by
Read Time:13 minsLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

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

Введение

Чтобы начать использовать Node.js, вы должны сначала понять различия между Node.js и традиционными средами сценариев на стороне сервера (например: PHP, Python, Ruby и т.д.).

Асинхронное программирование

Node.js использует модульную архитектуру для упрощения создания сложных приложений.

Скорее всего, вы знакомы с асинхронным программированием; это, в конце концов, «А» в Ajax. Каждая функция в Node.js является асинхронной. Следовательно, все, что обычно блокирует поток, вместо этого выполняется в фоновом режиме. Это самое важное, что нужно помнить о Node.js. Например, если вы читаете файл в файловой системе, вы должны указать функцию обратного вызова, которая выполняется, когда операция чтения будет завершена.

Вы делаете все!

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

И вот эквивалент, написанный на PHP:

Теперь давайте посмотрим на эти числа. В следующей таблице перечислено время ответа в миллисекундах для этих двух простых приложений:

Количество итераций Node.js PHP
100 2,00 0,14
10'000 3,00 10,53
1'000'000 15.00 1119,24
10'000'000 143,00 10621,46
1'000'000'000 11118,00 1036272,19

Я выполнил два приложения из командной строки, чтобы сервер не задерживал выполнение приложений. Я провел каждый тест десять раз и усреднил результаты. PHP заметно быстрее с меньшим количеством итераций, но это преимущество быстро растворяется по мере увеличения количества итераций. Когда все сказано и сделано, PHP на 93% медленнее, чем Node.js!

Node.js работает быстро, но вам нужно изучить несколько вещей, чтобы правильно его использовать.

Модули

Node.js использует модульную архитектуру для упрощения создания сложных приложений. Модули сродни библиотекам в C или юнитам в Паскале. Каждый модуль содержит набор функций, связанных с «объектом» модуля. Например, http модуль содержит функции, специфичные для HTTP. Node.js предоставляет несколько основных модулей из коробки, чтобы помочь вам получить доступ к файлам в файловой системе, создать HTTP и TCP / UDP-серверы и выполнять другие полезные функции.

Включить модуль легко; просто вызовите функцию require(), например:

Node.js - это только среда; вы должны делать все сами.

Функция require() возвращает ссылку на указанный модуль. В случае этого кода ссылка на http модуль сохранится в переменной http.

В приведенном выше коде мы передали имя модуля функции require(). Это заставляет Node искать папку node_modules в каталоге нашего приложения и искать модуль http в этой папке. Если Node не находит папку node_modules (или модуль http внутри нее), он затем просматривает глобальный кеш модуля. Вы также можете указать фактический файл, передав относительный или абсолютный путь, например:

Модули представляют собой инкапсулированные фрагменты кода. Код внутри модуля в основном приватный - это означает, что функции и переменные, определенные внутри них, доступны только изнутри модуля. Вы можете, однако, выставить функции и/или переменные, которые будут использоваться вне модуля. Для этого используйте объект exports и заполните его свойства и методы с помощью фрагментов кода, которые вы хотите открыть. Рассмотрим следующий пример:

Этот код создает переменную PI, доступ к которой может получить только код, содержащийся в модуле; он недоступен вне модуля. Затем в объекте exports создаются две функции. Эти функции доступны вне модуля, потому что они определены для объекта экспорта. В результате PI полностью защищен от внешних помех. Поэтому вы можете быть уверены, что область () и окружность () всегда будут вести себя так, как должны (пока значение будет задано для параметра r).

Глобальная область видимости

Node - это среда JavaScript, работающая на движке Google's V8 JavaScript. Таким образом, мы должны следовать рекомендациям, которые мы используем при разработке на клиентской стороне. Например, мы должны избегать добавления чего-либо в глобальную область видимости. Это, однако, не всегда возможно. Глобальная область в Node это GLOBAL (в отличие от window в браузере), и вы можете легко создать глобальную переменную или функцию, опуская ключевое слово var, например:

Еще раз, по возможности, следует избегать глобальной области видимости. Поэтому будьте осторожны и не забывайте использовать var при объявлении переменной.

Установка

Естественно, нам нужно установить Node, прежде чем мы сможем написать и выполнить приложение. Установка выполняется довольно просто, если вы используете Windows или OS X; сайт nodejs.org предлагает инсталляторы для этих операционных систем. Для Linux используйте любой менеджер пакетов. Откройте терминал и введите:

или:

Node.js находится в sid-репозиториях; вам может потребоваться добавить их в список источников:

Но имейте в виду, что установка пакетов sid на более старых системах может привести к повреждению вашей системы. Будьте осторожны и удалите /etc/apt/sources.list.d/sid.list после завершения установки Node.

Установка новых модулей

У Node.js есть менеджер пакетов, называемый Node Package Manager (NPM). Он автоматически устанавливается с помощью Node.js, и затем вы используете NPM для установки новых модулей. Чтобы установить модуль, откройте терминал/командную строку, перейдите в нужную папку и выполните следующую команду:

Неважно, какая у вас ОС; указанная выше команда установит модуль, который вы укажете вместо module_name.

Приложение Hello World

Естественно, наш первый скрипт Node.js напечатает текст «Hello World!» на консоль. Создайте файл hello.js и введите следующий код:

Теперь давайте выполним сценарий. Откройте терминал/командную строку, перейдите к папке, содержащей hello.js, и выполните следующую команду:

Вы должны увидеть как  'Hello World!' отображается в консоли.

HTTP-сервер

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

Этот код очень прост. Вы можете отправить больше данных клиенту, используя response.write() , но вы должны вызвать его перед вызовом response.end(). Сохраните этот код как http.js и введите его в консоль:

Откройте браузер и перейдите по адресу http://localhost:8080. Вы должны увидеть текст «Hello HTTP!».

Обработка URL-параметров

Как я упоминал ранее, в Node мы должны делать все сами, включая парсинг аргументов запроса. Это, однако, довольно просто. Взгляните на следующий код:

Этот код использует метод parse() модуля url, основного модуля Node.js, для преобразования URL-адреса запроса в объект. Возвращаемый объект имеет свойство query, которое извлекает параметры URL. Сохраните этот файл как get.js и выполните его с помощью следующей команды:

Затем перейдите по адресу http://localhost:8080/?Data=put_some_text_here в вашем браузере. Естественно, изменение значения параметра data не нарушит сценарий.

Чтение и запись файлов

Для управления файлами в Node мы используем модуль fs (основной модуль). Мы читаем и записываем файлы, используя методы fs.readFile() и fs.writeFile(), соответственно. Я объясню аргументы после следующего кода:

У Node.js есть менеджер пакетов, называемый Node Package Manager (NPM). Он автоматически устанавливается с помощью Node.js

Сохраните это как files.js. Перед запуском этого сценария создайте файл с именем test.txt в том же каталоге, что и files.js.

Этот код демонстрирует методы fs.readFile() и fs.writeFile(). Каждый раз, когда сервер получает запрос, скрипт считывает число из файла, увеличивает это число и записывает его в файл. Метод fs.readFile() принимает три аргумента: имя файла для чтения, ожидаемую кодировку и функцию обратного вызова.

Запись в файл, по крайней мере в этом случае, намного проще. Нам не нужно ждать каких-либо результатов, хотя вы будете проверять наличие ошибок в реальном приложении. Метод fs.writeFile() принимает имя файла и данные в качестве аргументов. Он также принимает третий и четвертый аргументы (оба являются необязательными), чтобы указать кодировку и функцию обратного вызова соответственно.

Теперь давайте запустим этот скрипт со следующей командой:

Откройте его в браузере (http://localhost:8080) и обновите его несколько раз. Теперь вы можете подумать, что в коде есть ошибка, потому что кажется, что число увеличивается на два. Это не ошибка. Каждый раз, когда вы запрашиваете этот URL-адрес, на сервер отправляются два запроса. Первый запрос автоматически создается браузером, который запрашивает favicon.ico, и, конечно, второй запрос для URL (http://localhost:8080).

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

Попробуйте теперь; этот код должен работать должным образом.

Доступ к базам данных MySQL

Большинство традиционных серверных технологий имеют встроенные средства подключения к базе данных и выполнения запросов к ней. Для Node.js вам необходимо установить библиотеку. Для этого урока я выбрал стабильный и простой в использовании модуль node-mysql. Полное имя этого модуля - mysql@2.0.0-alpha2 (все после @ - номер версии). Откройте консоль, перейдите в каталог, в котором вы сохранили свои скрипты, и выполните следующую команду:

Она загружает и устанавливает модуль, а также создает папку node_modules в текущем каталоге. Теперь давайте посмотрим, как мы можем использовать его в нашем коде; см. следующий пример:

Делать запрос к базе данных с помощью этой библиотеки легко; просто введите строку запроса и функцию обратного вызова. В реальном приложении вы должны проверить наличие ошибок (параметр error не будет undefined при возникновении ошибок) и отправить коды ответов в зависимости от успеха или ошибки запроса. Также обратите внимание, что мы установили Content-Type в x-application/json, который является допустимым типом MIME для JSON. Параметр rows содержит результат запроса, и мы просто преобразуем данные из rows в структуру JSON, используя метод JSON.stringify() .

Сохраните этот файл как mysql.js и выполните его (если у вас установлен MySQL):

Откройте адрес http://localhost:8080 в своем браузере, и вам будет предложено загрузить файл в формате JSON.

Заключение

Каждая функция в Node.js является асинхронной.

Node.js требует дополнительной работы, но выигрыш в быстром и надежном приложении стоит того. Если вы не хотите делать все на самом низком уровне, вы всегда можете выбрать фреймворк, как например Express, чтобы упростить разработку приложений.

Node.js - это многообещающая технология и отличный выбор для приложения с высокой нагрузкой. Это подтверждают корпорации, такие как Microsoft, eBay и Yahoo. Если вы не уверены в размещении своего сайта/приложения, вы всегда можете использовать дешевое решение VPS или различные облачные сервисы, такие как Microsoft Azure и Amazon EC2. Оба эти сервиса обеспечивают масштабируемую среду по разумной цене.

Не забудьте оставить комментарий, если у вас есть вопросы!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.