Разработка приложения Node.js в Windows Azure с хранилищем в MongoDB (на платформах Windows, Mac, Linux)

В этом руководстве рассказывается об использовании MongoDB для хранения данных и доступа к ним из приложения node, размещенного на платформе Windows Azure.MongoDB — это популярная высокопроизводительная база данных NoSQL с открытым исходным кодом. Предполагается, что вы имеете знания и опыт работы с приложением node, MongoDB и системой Git.

О чем пойдет речь в данном руководстве:

  • Как настроить виртуальную машину, работающую под управлением Linux или Windows, и установить MongoDB.
  • Как установить модуль с помощью диспетчера пакетов (npm).
  • Как получить доступ к MongoDB из приложения node.
  • Как использовать межплатформенные средства Windows Azure для создания веб-сайта Windows Azure.

Следуя инструкциям этого руководства, вы разработаете веб-приложение по управлению задачами, позволяющее создавать, извлекать и выполнять задачи. Задачи будут сохраняться в MongoDB.

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

Примечание. Это руководство ссылается на папку tasklist. Полный путь к папке опущен из-за различий семантик путей в операционных системах. Эту папку следует создать в расположении, к которому легко обращаться из локальной файловой системы, например ~/node/tasklist или c:\node\tasklist

Примечание. Большинство действий выполняются с помощью командной строки. Используйте командную строку операционной системы вашего ПК, например Windows PowerShell (Windows) или Bash (Unix Shell). В ОС X доступ к командной строке осуществляется с помощью приложения Terminal.

Необходимые компоненты

Перед выполнением инструкций убедитесь, что установлены следующие компоненты:

  • node — последняя версия;
  • Git.

Подготовка

В этом разделе рассказывается о создании виртуальной машины на платформе Windows Azure, установке MongoDB, настройке среды разработки и установке драйвера на C# для MongoDB.

Создание виртуальной машины и установка MongoDB

Предполагается, что вы уже создали виртуальную машину на платформе Windows Azure. Теперь на нее нужно установить MongoDB.

После создания виртуальной машины на платформе Windows Azure и установки MongoDB необходимо запомнить DNS-имя виртуальной машины (например, testlinuxvm.cloudapp.net) и внешний порт MongoDB, указанный в конечной точке. Эта информация потребуется нам позднее.

Регистрация для использования функции предварительного просмотра веб-сайтов Windows Azure

Чтобы создать веб-сайт Windows Azure, нужно зарегистрироваться для использования функции предварительного просмотра веб-сайтов Windows Azure. Кроме того, после регистрации можно получить бесплатную пробную учетную запись Windows Azure.

Откройте веб-браузер и перейдите на веб-сайт https://www.windowsazure.com.

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

Включение веб-сайта Windows Azure

Перейдите на страницу https://account.windowsazure.com/ и выполните вход с помощью учетной записи Windows Azure.

Щелкните элемент preview features, чтобы увидеть доступные варианты предварительного просмотра.

3. Выполните прокрутку до пункта Web Sites и нажмите кнопку try it now.

4. Выберите подписку и установите флажок.

Установка модулей и скаффолдинг

В этом разделе вы создадите приложение Node и с помощью npm добавите пакеты модулей. Для создания приложения потребуются модули Express и Mongoose. Модуль Express предоставляет платформу Model View Controller для узла, а модуль Mongoose является инструментом взаимодействия с MongoDB.

Установка модулей и скаффолдинг

В командной строке перейдите в каталог tasklist. Если каталог tasklist не существует, создайте его.

Чтобы установить модуль express, введите следующую команду:

sudo npm install express -g

Примечание. При использовании параметра -g в некоторых операционных системах может появиться сообщение об ошибке «Ошибка: EPERM, chmod '/usr/local/bin/express'» и запрос на запуск от имени администратора. В этом случае воспользуйтесь командой sudo для запуска npm с привилегиями более высокого уровня.

Результат работы команды будет выглядеть примерно так, как показано ниже: 

Примечание. Параметр -g, используемый при инсталляции модуля express, делает его доступным из любого места. Благодаря этому в команде express для создания скаффолдера веб-сайта не нужно вводить сведения о пути.

Чтобы создать скаффолдер, который будет применяться для этого приложения, используйте команду express.

express

Результат работы команды будет выглядеть примерно так, как показано ниже:

После выполнения команды в каталоге tasklist появятся несколько новых каталогов и файлов.

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

package.json –– это один из файлов, созданных в результате выполнения командыexpress. Он содержит список дополнительных модулей, необходимых для приложения Express. Позднее, при развертывании приложения на новом сайте Windows Azure, этот файл будет использоваться для определения модулей, устанавливаемых на платформе Windows Azure с целью поддержки приложения.

В командной строке перейдите в каталог tasklist и введите следующую команду, чтобы установить модули, описанные в файле package.json:

npm install

Результат работы команды будет выглядеть примерно так, как показано ниже:

По умолчанию будут установлены все модули, необходимые приложению Express.

Затем введите следующую команду для локальной установки модуля Mongoose, а также для сохранения записи о нем в файле package.json:

npm install mongoose --save

Результат работы команды будет выглядеть примерно так, как показано ниже:

Примечание. Сообщения об установке инструмента синтаксического анализа C++ bson можно пропустить.

Использование MongoDB в приложении node

В этом разделе вы дополните базовое приложение, созданное с помощью командыexpress, файлом task.js, содержащим модель для ваших задач. Вы также измените файл контроллера app.js и создадите файл контроллера tasklist.js для использования модели.

Создание модели

В каталоге tasklist создайте каталог с именем models. В каталоге models создайте файл с именем task.js. Этот файл будет содержать модель для задач, созданных приложением.

var mongoose = require('mongoose') , Schema = mongoose.Schema;

В начало файла task.js добавьте код, необходимый для ссылки на требуемые библиотеки. Затем добавьте код для определения и экспорта модели.

Эта модель будет использоваться для взаимодействий с базой данных MongoDB.

var TaskSchema = new Schema({ itemName : String , itemCategory : String , itemCompleted : { type: Boolean, default: false } , itemDate : { type: Date, default: Date.now } });

Сохраните и закройте файл task.js.

Создание контроллера

В каталоге tasklist/routes создайте файл с именем tasklist.js и откройте его в текстовом редакторе.

Добавьте следующий код в файл tasklist.js. Будет загружен модуль mongoose и модель задач, определенная в файле task.js. Функция TaskList используется для создания подключения к серверу MongoDB на основе значения connection.

var mongoose = require('mongoose') , task = require('../models/task.js'); module.exports = TaskList; function TaskList(connection) { mongoose.connect(connection); }

Продолжайте дополнять файл tasklist.js путем добавления методов, используемых дляshowTasksaddTask и completeTasks.

TaskList.prototype = { showTasks: function(req, res) { task.find({itemCompleted: false}, function foundTasks(err, items) { res.render('index',{title: 'My ToDo List ', tasks: items}) }); }, addTask: function(req,res) { var item = req.body.item; newTask = new task(); newTask.itemName = item.name; newTask.itemCategory = item.category; newTask.save(function savedTask(err){ if(err) { throw err; } }); res.redirect('/'); }, completeTask: function(req,res) { var completedTasks = req.body; for(taskId in completedTasks) { if(completedTasks[taskId]=='true') { var conditions = { _id: taskId }; var updates = { itemCompleted: completedTasks[taskId] }; task.update(conditions, updates, function updatedTask(err) { if(err) { throw err; } }); } } res.redirect('/'); } }

Сохраните файл task.js.

Изменение файла app.js.

В каталоге tasklist откройте файл app.js в текстовом редакторе. Этот файл был создан ранее с помощью команды express.

Замените содержимое после комментария следующим кодом. Будет инициализирована команда TaskList со строкой подключения для сервера MongoDB и добавлены функции, определенные в файле tasklist.js в качестве маршрутов.

var TaskList = require('./routes/tasklist'); var taskList = new TaskList('mongodb://mongodbserver/tasks'); app.get('/', taskList.showTasks.bind(taskList)); app.post('/addtask', taskList.addTask.bind(taskList)); app.post('/completetask', taskList.completeTask.bind(taskList)); app.listen(process.env.port || 3000);

Примечание. Указанную выше строку подключения следует заменить созданной ранее строкой подключения для сервера MongoDB. Например, mongodb://mymongodb.cloudapp.net/tasks.

Сохраните файл app.js.

Изменение индексированного представления

Перейдите в каталог views и откройте файл index.jade в текстовом редакторе.

Замените содержимое файла index.jade указанным ниже кодом. Таким образом будет определено представление для отображения существующих задач, а также формы для добавления новых задач и отметки завершенных.

h1= title form(action="/completetask", method="post") table(border="1") tr td Name td Category td Date td Complete each task in tasks tr td #{task.itemName} td #{task.itemCategory} - var day = task.itemDate.getDate(); - var month = task.itemDate.getMonth() + 1; - var year = task.itemDate.getFullYear(); td #{month + "/" + day + "/" + year} td input(type="checkbox", name="#{task._id}", value="#{!task.itemCompleted}", checked=task.itemCompleted) input(type="submit", value="Update tasks") hr form(action="/addtask", method="post") table(border="1") tr td Item Name: td input(name="item[name]", type="textbox") tr td Item Category: td input(name="item[category]", type="textbox") input(type="submit", value="Add item")

Сохраните и закройте файл index.jade.

Локальный запуск приложения

Чтобы протестировать приложение на локальном компьютере, выполните следующие действия.

В командной строке перейдите в каталог tasklist. С помощью следующей команды запустите приложение на локальном компьютере:

node app.js

Запустите веб-браузер и перейдите на страницу https://localhost:3000. Откроется веб-страница, аналогичная следующей:

В полях Item Name и Item Category введите нужные значения, а затем нажмите кнопку Add item.

Страница обновится, и в таблице списка задач отобразится элемент.

Чтобы завершить задачу, установите флажок в столбце Complete, а затем нажмите кнопку Update tasks. Поскольку после нажатия кнопки Update tasks никаких видимых изменений не происходит, в записи MongoDB документ помечается как завершенный.

Чтобы остановить обработку узла, откройте командную строку и нажмите сочетание клавиш CTRL и C.

Развертывание приложения в Windows Azure

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

Примечание. Эти действия можно выполнить также на портале Windows Azure. Инструкции по использованию портала Windows Azure для развертывания приложения Node.js см. в разделе «Создание и развертывание приложения Node.js на веб-сайте Windows Azure».

Примечание. Если вы впервые создали веб-сайт Windows Azure, то для развертывания приложения следует использовать портал Windows Azure.

Установка инструмента командной строки Windows Azure для Mac и Linux

Чтобы установить инструмент командной строки, воспользуйтесь следующей командой:

sudo npm install azure -g

Примечание. Если вы установили пакет инструментов разработки Windows Azure SDK для Node.js из Центра разработчиков Windows Azure, то средства командной строки уже установлены. Дополнительные сведения приведены в разделе «Установка инструмента командной строки Windows Azure для Mac и Linux».

Примечание. Поскольку инструменты командной строки разработаны главным образом для пользователей Mac и Linux, они основаны на Node.js и работают в любой системе с поддержкой Node.

Импорт параметров публикации

Перед использованием инструментов командной строки в Windows Azure необходимо загрузить файл с информацией о подписке. Чтобы загрузить и импортировать этот файл, выполните следующие действия.

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

azure account download

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

После загрузки файла используйте следующую команду для импорта параметров.

azure account import

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

Когда импорт будет завершен, удалите файл параметров публикации, поскольку он содержит конфиденциальную информацию о подписке Windows Azure и больше не потребуется.

Создание веб-сайта Windows Azure

В командной строке перейдите в каталог tasklist.

Создайте новый веб-сайт Windows Azure с помощью следующей команды. Замените myuniquesitename уникальным именем веб-сайта. Это значение используется как часть URL-адреса готового веб-сайта.

azure site create myuniquesitename --git

Появится запрос на указание центра обработки данных, где будет находиться сайт. Выберите ближайший центр обработки данных.

Параметр --git локально создаст репозиторий Git в папке tasklist (если таковой не существует). Кроме того, будет создана удаленная система Git с именем azure, которая будет использоваться для публикации приложения в Windows Azure. Появится новый файл iisnode.yml с параметрами, применяемыми Windows Azure для размещения приложений node. И наконец, будет создан файл .gitignore с целью предотвращения публикации папки модулей node в .git.

Примечание. Если данная команда запускалась из каталога, содержащего репозиторий Git, то повторная инициализация каталога выполняться не будет.

Примечание. Если параметр --git опущен, а каталог содержит репозиторий Git, то все равно будет создан удаленный репозиторий azure.

Результат выполнения данной команды выглядит следующим образом. Обратите внимание, что строка, начинающаяся с Created website at, содержит URL-адрес веб-сайта.

Примечание. Если этот веб-сайт Windows Azure –– первый для вашей подписки, то появится указание использовать портал для создания веб-сайта. Дополнительные сведения приведены в разделе «Создание и развертывание приложения Node.js на веб-сайтах Windows Azure».

Публикация приложения

В окне Terminal перейдите в каталог tasklist, если вы еще не сделали это.

Используйте следующие команды для добавления и последующей фиксации файлов в локальном репозитории Git.

git add . 
git commit -m "adding files"

Помещая последние изменения репозитория Git на веб-сайт Windows Azure, необходимо указать, что конечная ветвь является главной, поскольку используется для контента веб-сайта.

git push azure master

Результаты работы будут выглядеть примерно так: при развертывании Windows Azure загрузит все модули npm.

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

Дальнейшие действия

Поскольку в данном руководстве мы применяли MongoDB для хранения данных, можно воспользоваться службой Windows Azure Table. Дополнительные сведения приведены в разделе «Веб-приложение Node.js и служба Windows Azure Table».

Дополнительные ресурсы

Автор статьи: Владимир Юнев.