Статьи

Node.js и MongoLab в Windows Azure

(Это руководство изначально было опубликовано на портале документации Windows Azure в январе 2013 г.) d

Приветствую, искатели приключений! Добро пожаловать в MongoDB как услуга. Вы хотите создать приложение Node.js в Windows Azure с MongoDB с помощью надстройки MongoLab Azure Store?

В этом уроке вы будете:

  1. Предоставление базы данных. Дополнительный модуль MongoLab для Windows Azure Store предоставит вам базу данных MongoDB, размещенную в облаке Windows Azure и управляемую платформой облачной базы данных MongoLab .
  2. Создайте приложение — это будет простое приложение Node.js для ведения списка задач.
  3. Развертывание приложения. Связав несколько хуков конфигурации, мы сделаем наш код быстрым.
  4. Управление базой данных. Наконец, мы покажем вам веб-портал управления базами данных MongoLab, где вы можете легко находить, визуализировать и изменять данные.

В любое время на протяжении всего этого урока, не стесняйтесь, пишите на адрес support@mongolab.com, если у вас есть какие-либо вопросы. Чтобы выполнить это руководство, вам нужна учетная запись Windows Azure с включенной функцией веб-сайтов Windows Azure. Вы можете создать бесплатную пробную учетную запись и включить функции предварительного просмотра всего за пару минут. Подробнее см. В разделе Создание учетной записи Windows Azure и включение учебника по функциям предварительного просмотра .

Кроме того, убедитесь, что у вас установлено следующее:

Быстрый старт

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

  1. Откройте Windows Azure Store.
    Кнопка-магазин
  2. Нажмите на дополнение к MongoLab.
    начального mongolab
  3. Нажмите на надстройку MongoLab в списке дополнений, а затем нажмите « Информация о подключении» .
    Кнопка-connectioninfo
  4. Скопируйте MONGOLAB_URI в буфер обмена. Этот URI содержит имя пользователя и пароль вашей базы данных. Относитесь к ней как к конфиденциальной информации и не делитесь ею.
    Диалог-mongolab_connectioninfo
  5. Добавьте значение в список «Строки подключения» в меню «Конфигурация» веб-приложения Windows Azure:
    фокус-mongolab-websiteconnectionstring
  6. В качестве имени введите MONGOLAB_URI.
  7. В поле Value вставьте строку подключения, которую мы получили в предыдущем разделе.
  8. Выберите Custom в раскрывающемся списке Type (вместо SQLAzure по умолчанию).
  9. Запустите, npm install mongooseчтобы получить Mongoose, драйвер узла MongoDB.
  10. Установите хук в своем коде для получения URI соединения MongoLab из переменной среды и подключитесь:
var mongoose = require('mongoose');  
...
var connectionString = process.env.CUSTOMCONNSTR_MONGOLAB_URI
...
mongoose.connect(connectionString);

Примечание. Windows Azure добавляет префикс CUSTOMCONNSTR_ к первоначально объявленной строке подключения, поэтому код ссылается на CUSTOMCONNSTR_MONGOLAB_URI. вместо MONGOLAB_URI .

Теперь перейдем к полному уроку …

Предоставление базы данных

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

  1. Войдите на портал управления Windows Azure.
  2. Нажмите Новый .
    Кнопка новый
  3. Выберите Магазин .
    Кнопка-магазин
  4. Выберите MongoLab. Вы можете найти нас в категории « Службы приложений », а также в разделе « Все» .
    начального mongolab
  5. Нажмите Далее . Отобразится запись магазина MongoLab.
    Кнопка-некст

    Экран-newmongolab
  6. Выберите желаемый вариант подписки .
  7. Введите имя для вашей базы данных. Ваше имя может содержать только буквенно-цифровые символы, тире, точки и подчеркивания. MongoLab также требует, чтобы это имя было уникальным, поэтому вас могут попросить повторно подать запрос, если имя занято.
  8. Выберите нужный регион .
    Важное замечание : Для максимальной производительности и безопасности мы настоятельно рекомендуем подготовить ваш надстройку MongoLab и веб-сайт Windows Azure в одном регионе. Начиная с этой даты в блоге дополнение MongoLab доступно в регионах Восточной и Западной США.
  9. Нажмите Далее .
    Кнопка-некст
  10. Просмотрите информацию о покупке в вашем магазине и нажмите « Купить» для подтверждения.
    Кнопка-покупка
  11. Кнопка прогресса на панели инструментов отображает ваш статус подготовки. Сообщение об успешном завершении отображается после завершения подготовки.
    Кнопка-прогресс

    сообщение-provisionsuccess

Поздравляем! MongoLab только что подготовил базу данных MongoDB в выбранном вами регионе Windows Azure. Теперь у вас есть доступ к нашему интерфейсу управления и поддержке 24/7.

Создать приложение

В этом разделе вы настроите свою среду разработки и создадите код для веб-приложения со списком основных задач, используя Node.js, Express и MongoDB. Express предоставляет инфраструктуру View Controller для узла, в то время как Mongoose является драйвером для связи с MongoDB в узле.

Настроить

Генерация лесов и установка модулей

  1. В командной строке создайте и перейдите в каталог списка задач . Это будет каталог вашего проекта.
  2. Введите следующую команду, чтобы установить экспресс.
    npm install express -g

    -gуказывает на глобальный режим, который мы используем, чтобы сделать экспресс- модуль доступным без указания пути к каталогу. Если вы получили сообщение об ошибке: EPERM, chmod ‘/ usr / local / bin / express’ , используйте sudo для запуска npm с более высоким уровнем привилегий.

    Вывод этой команды должен выглядеть примерно так:

express@2.5.9 /usr/local/lib/node_modules/express
├── mime@1.2.4 
├── mkdirp@0.3.0 
├── qs@0.4.2 
└── connect@1.8.7

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

express

Вывод этой команды должен выглядеть примерно так:

create : .
create : ./package.json
create : ./app.js
create : ./public
create : ./public/javascripts
create : ./public/images
create : ./public/stylesheets
create : ./public/stylesheets/style.css
create : ./routes
create : ./routes/index.js
create : ./views
create : ./views/layout.jade
create : ./views/index.jade

dont forget to install dependencies:
$ cd . && npm install

После выполнения этой команды у вас должно появиться несколько новых каталогов и файлов в каталоге списка задач .

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

npm install

Вывод этой команды должен выглядеть примерно так:

express@2.5.8 ./node_modules/express
├── mime@1.2.4
├── qs@0.4.2
├── mkdirp@0.3.0
└── connect@1.8.7
jade@0.26.0 ./node_modules/jade
├── commander@0.5.2
└── mkdirp@0.3.0
  1. Package.json файл один из файлов , созданных с помощью экспресс — команды. Этот файл содержит список дополнительных модулей, необходимых для приложения Express. Позже, когда вы развернете это приложение на веб-сайте Windows Azure, этот файл будет использоваться для определения, какие модули необходимо установить в Windows Azure для поддержки вашего приложения.

  2. Затем введите следующую команду, чтобы установить модуль Mongoose локально, а также сохранить запись для него в файле package.json :
    npm install mongoose --save

    Вывод этой команды должен выглядеть примерно так:

    mongoose@2.6.5./node_modules/mongoose
    ├── hooks@0.2.1└── mongodb@1.0.2

    Вы можете спокойно игнорировать любое сообщение об установке синтаксического анализатора bson для C ++.

Код

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

Создать модель

  1. В каталоге списка задач создайте новый каталог с именем models .
  2. В модели каталога, создать новый файл с именем task.js . Этот файл будет содержать модель для задач, созданных вашим приложением.
  3. Добавьте следующий код в файл task.js :
var mongoose = require('mongoose')
  , Schema = mongoose.Schema;

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

module.exports = mongoose.model('TaskModel', TaskSchema)
  1. Сохраните и закройте файл task.js.

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

  1. В каталоге tasklist / маршруты создайте новый файл с именем tasklist.js и откройте его в текстовом редакторе.
  2. Добавьте следующий код в tasklist.js . Это загружает мангуст модуль и модели задачи определены в task.js . Функция TaskList используется для создания соединения с сервером MongoDB на основе значения соединения и предоставляет методы showTasks , addTask и completeTasks :
var mongoose = require('mongoose')
  , task = require('../models/task.js');

module.exports = TaskList;

function TaskList(connection) {
  mongoose.connect(connection);
}

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('/');
  }
}
  1. Сохраните файл tasklist.js .

Изменить представление индекса

  1. Перейдите в каталог views и откройте файл index.jade в текстовом редакторе.
  2. Замените содержимое файла 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 .

Заменить app.js

  1. В каталоге списка задач откройте файл app.js в текстовом редакторе. Этот файл был создан ранее с помощью команды express .
  2. Замените содержимое следующим кодом. Это инициализирует TaskList со строкой соединения для сервера MongoDB, добавляет функции, определенные в tasklist.js как маршруты, и запускает сервер приложений:

 

var express = require('express')
    , routes = require('./routes')
    , user = require('./routes/user')
    , http = require('http')
    , path = require('path');
var TaskList = require('./routes/tasklist');
var taskList = new TaskList(process.env.CUSTOMCONNSTR_MONGOLAB_URI);

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', taskList.showTasks.bind(taskList));
app.post('/addtask', taskList.addTask.bind(taskList));
app.post('/completetask', taskList.completeTask.bind(taskList));

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});
  1. Обратите внимание на следующий код выше:
    var taskList =newTaskList(process.env.CUSTOMCONNSTR_MONGOLAB_URI);

    Конструктор TaskList принимает URI соединения MongoDB. Здесь вы получаете доступ к переменной среды, которую вы настроите позже. Если у вас есть локальный экземпляр mongo, работающий в целях разработки, вы можете временно установить для этого значения значение «localhost» вместо process.env.CUSTOMCONNSTR_MONGOLAB_URI.

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

Разверните приложение

Теперь, когда приложение разработано, пришло время создать веб-сайт Windows Azure для его размещения, настроить этот веб-сайт и развернуть код. Центральным в этом разделе является использование строки подключения MongoDB (URI). Вы собираетесь настроить переменную среды на своем веб-сайте с этим URI, чтобы отделить URI от вашего кода. Вы должны рассматривать URI как конфиденциальную информацию, так как она содержит учетные данные для подключения к вашей базе данных.

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

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

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

npm install azure-cli -g

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

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

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

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

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

    лазурь-счет-скачать-кли

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

  2. После завершения загрузки файла используйте следующую команду для импорта настроек:
    azure account import<path-to-file>

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

info:   Executing command account import
info:   Found subscription: subscriptionname
info:   Setting default subscription to: subscriptionname
warn:   The '/Users/user1/.azure/publishSettings.xml' file contains sensitive information.
warn:   Remember to delete it now that it has been imported.
info:   Account publish settings imported successfully
info:   account iomport command OK
  1. OK
  2. После завершения импорта вы должны удалить файл настроек публикации, так как он больше не нужен и содержит конфиденциальную информацию о вашей подписке Windows Azure.

Создайте новый веб-сайт и нажмите ваш код

Создать веб-сайт в Windows Azure очень просто. Если это ваш первый веб-сайт Windows Azure, вы должны использовать портал. Если у вас уже есть хотя бы один, перейдите к шагу 7.

  1. На портале Windows Azure нажмите « Создать» .
    Кнопка новый
  2. Выберите Compute> Веб-сайт> Быстрое создание .
    Экран-mongolab-newwebsite
  3. Введите префикс URL. Выберите имя, которое вы предпочитаете, но имейте в виду, что оно должно быть уникальным («mymongoapp», скорее всего, будет недоступно).
  4. Выберите тот же  регион,  что и надстройка MongoLab, которую вы указали выше.
  5. Нажмите Создать веб-сайт .
  6. Когда создание веб-сайта завершится, щелкните имя веб-сайта в списке веб-сайтов. Отображается панель инструментов веб-сайта.
    Экран-mongolab-websitedashboard
  7. Нажмите Set Up Git публикации под быстрым взглядом , и введите желаемое GIT имя пользователя и пароль. Вы будете использовать этот пароль при переходе на свой веб-сайт (на шаге 9).
    Кнопка-ГИТ-публикации
  8. Если вы создали свой веб-сайт, используя шаги, описанные выше, следующая команда завершит процесс. Однако, если у вас уже есть несколько веб-сайтов Windows Azure, вы можете пропустить вышеуказанные шаги и создать новый веб-сайт с помощью этой же команды. Из каталога проекта вашего списка задач :
    azure site create myuniquesitename --git

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

    --gitПараметр создает:

    •  локальный репозиторий git в папке списка задач , если таковой не существует.
    • ГИТ-пульт под названием «лазурь», который будет использоваться для публикации приложения в Windows Azure.
    • iisnode.yml файл, который содержит параметры , используемые Windows Azure для узла хост — приложений.
    • файл .gitignore для предотвращения публикации папки node-modules в .git.
  1. После выполнения этой команды вы увидите вывод, подобный следующему. Обратите внимание, что строка, начинающаяся с « Созданный веб-сайт», содержит URL-адрес веб-сайта.
info:   Executing command site create
info:   Using location southcentraluswebspace
info:   Executing `git init`
info:   Creating default web.config file
info:   Creating a new web site
info:   Created web site at  mongodbtasklist.azurewebsites.net
info:   Initializing repository
info:   Repository initialized
info:   Executing `git remote add azure http://gitusername@myuniquesitename.azurewebsites.net/mongodbtasklist.git`
info:   site create command OK

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

git add .
git commit -m "adding files"

Нажмите свой код:

git push azure master

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

Вы увидите вывод, похожий на следующий. По мере развертывания Windows Azure загрузит все модули npm.

Counting objects: 17, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (17/17), 3.21 KiB, done.
Total 17 (delta 0), reused 0 (delta 0)
remote: New deployment received.
remote: Updating branch 'master'.
remote: Preparing deployment for commit id 'ef276f3042'.
remote: Preparing files for deployment.
remote: Running NPM.
...
remote: Deploying Web.config to enable Node.js activation.
remote: Deployment successful.
To https://username@mongodbtasklist.azurewebsites.net/MongoDBTasklist.git
 * [new branch]      master -> master

Вы почти закончили!

Настройте свою среду

Помните process.env.CUSTOMCONNSTR_MONGOLAB_URI в коде? Мы хотим заполнить эту переменную среды значением, предоставленным Windows Azure во время подготовки базы данных MongoLab.

Получить строку подключения MongoLab

Когда вы предоставляете базу данных MongoLab, MongoLab передает URI подключения к Windows Azure в стандартном формате строки подключения MongoDB. Это значение используется для инициации подключения MongoDB через выбранный вами драйвер MongoDB. Для получения дополнительной информации о строках соединения см. Соединения на mongodb.org. Этот URI содержит имя пользователя и пароль вашей базы данных. Относитесь к ней как к конфиденциальной информации и не делитесь ею.

Вы можете получить этот URI на портале Windows Azure, выполнив следующие действия:

  1. Выберите дополнения .
    Кнопка-аддоны
  2. Найдите сервис MongoLab в списке дополнений.
    начального mongolabaddon
  3. Выберите имя вашего дополнения, чтобы перейти на страницу дополнения.
  4. Нажмите Информация о соединении . Ваш URI MongoLab отображает:
    Кнопка-connectioninfo

    Диалог-mongolab_connectioninfo
  5. Нажмите кнопку буфера обмена справа от значения MONGOLAB_URI, чтобы скопировать полное значение в буфер обмена.

Добавить строку подключения в переменные среды веб-сайта

Хотя есть возможность вставить URI MongoLab в ваш код, мы рекомендуем настроить его в среде для простоты управления. Таким образом, если URI изменяется, вы можете обновить его через портал Windows Azure, не переходя к коду.

  1. На портале Windows Azure выберите Веб-сайты .
  2. Нажмите на название веб-сайта в списке веб-сайтов. Откроется панель инструментов веб-сайта.
    начальный веб-сайт
  3. Нажмите Настроить в строке меню.
    фокус-mongolab-websitedashboard-конфигурации
  4. Прокрутите вниз до раздела Строки подключения.
    фокус-mongolab-websiteconnectionstring
  5. В качестве имени введите MONGOLAB_URI.
  6. В поле Value вставьте строку подключения, которую мы получили в предыдущем разделе.
  7. Выберите Custom в раскрывающемся списке Type (вместо SQLAzure по умолчанию ).
  8. Нажмите Сохранить на панели инструментов. Примечание. Windows Azure добавляет префикс CUSTOMCONNSTR_ к этой переменной, поэтому приведенный выше код ссылается на CUSTOMCONNSTR_MONGOLAB_URI.
    Кнопка-сайт-сохранить

Успех!

Запустите azure site browseиз каталога проекта, чтобы автоматически открыть браузер, или откройте браузер и вручную перейдите по URL вашего веб-сайта (myuniquesite.azurewebsites.net):

todo_list_noframe

Управление базой данных

Поздравляем! Вы только что запустили приложение Node.js, поддерживаемое базой данных MongoDB, размещенной на MongoLab! Теперь, когда у вас есть база данных MongoLab, вы можете обратиться по адресу support@mongolab.com с любыми вопросами или проблемами, касающимися вашей базы данных, или для помощи с MongoDB или самим драйвером узла. Удачи там!

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

  1. Выберите дополнения .
    Кнопка-аддоны
  2. Найдите ваш сервис MongoLab в вашем списке дополнений.
    начальный веб-сайт
  3. Нажмите на название вашего дополнения, чтобы перейти на страницу дополнения.
  4. Нажмите Управление . Откроется новая вкладка браузера с домашней страницей базы данных MongoLab:
    Кнопка-управления

    Экран-mongolab_dblanding

Отсюда вы можете выбрать конкретную коллекцию и перейти к отдельным документам. Выйдите, когда закончите.

Поздравляем! Вы только что запустили приложение Node.js, поддерживаемое базой данных MongoDB, размещенной на MongoLab! Теперь, когда у вас есть база данных MongoLab, вы можете обратиться по адресу support@mongolab.com с любыми вопросами или проблемами, касающимися вашей базы данных, или для помощи с MongoDB или самим драйвером узла.