Создание приложения Angular с помощью API Azure Cosmos DB для MongoDB — использование Mongoose для подключения к Azure Cosmos DB

ПРИМЕНЯЕТСЯ К: Mongodb

Important

Вы хотите перенести существующее приложение MongoDB или использовать функции языка запросов MongoDB (MQL)? Рассмотрим Azure DocumentDB.

Вы ищете решение для баз данных для крупномасштабных сценариев с соглашением об уровне обслуживания (SLA) с доступностью 99,999%, мгновенным автомасштабированием и автоматическим переключением на резервные ресурсы в нескольких регионах? Рассмотрим Azure Cosmos DB для NoSQL.

В этом многокомпонентном учебном пособии показано, как создать приложение Node.js на базе Express и Angular и подключить его к вашей учетной записи Azure Cosmos DB, настроенной с помощью API Azure Cosmos DB для MongoDB. В этой статье описана часть 5 руководства, которая основана на части 4.

В этой части руководства вы выполните следующее:

  • Используйте Mongoose для подключения к Azure Cosmos DB.
  • Получите строку подключения вашей базы данных Azure Cosmos DB.
  • создадите модель Hero;
  • создадите службу Hero для получения данных Hero.
  • Запустите приложение на локальном компьютере.

Если у вас нет подписки Azure, создайте бесплатную учетную запись перед началом работы.

Предпосылки

  • Перед началом работы с этим руководством выполните шаги в части 4.

  • В этом руководстве требуется локальное выполнение Azure CLI. Требуется Azure CLI версии 2.0 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо установить или обновить Azure CLI, ознакомьтесь со статьей об установке Azure CLI 2.0.

  • В этом руководстве изложены пошаговые инструкции по созданию приложения. Готовое приложение можно скачать из репозитория angular-cosmosdb на GitHub.

Использование Mongoose для подключения

Mongoose является библиотекой моделирования данных объектов (ODM) для MongoDB и Node.js. Вы можете использовать Mongoose для подключения к учетной записи Azure Cosmos DB. Следуйте инструкциям ниже, чтобы установить Mongoose и подключиться к Azure Cosmos DB:

  1. Установите модуль npm mongoose, который является API, используемым для обмена данными с MongoDB.

    npm install mongoose@5.13.15 --save
    

    Important

    Azure Cosmos DB для MongoDB совместим с версией Mongoose, вплоть до 5.13.15. Дополнительные сведения см. в обсуждении проблемы в репозитории GitHub Mongoose.

  2. В папке server создайте файл с именем mongo.js. Затем добавьте в этот файл сведения о подключении учетной записи Azure Cosmos DB.

  3. Скопируйте следующий код в файл mongo.js. Этот код предоставляет следующие функциональные возможности:

    • Требуется Mongoose.

    • Переопределяет объект Promise Mongo, чтобы использовался базовый объект Promise, который встроен в ES6 или ES2015 и более поздней версии.

    • Вызывает ENV-файл, который позволяет задавать определенные настройки в зависимости от среды — промежуточной, производственной или среды разработки. Вы создадите этот файл при работе со следующим разделом.

    • Содержит строку подключения MongoDB, которая задается в ENV-файле.

    • Создает функцию соединения, которая вызывает Mongoose.

      const mongoose = require('mongoose');
      /**
      * Set to Node.js native promises
      * Per https://mongoosejs.com/docs/promises.html
      */
      mongoose.Promise = global.Promise;
      
      const env = require('./env/environment');
      
      // eslint-disable-next-line max-len
      const mongoUri = `mongodb://${env.accountName}:${env.key}@${env.accountName}.documents.azure.com:${env.port}/${env.databaseName}?ssl=true`;
      
      function connect() {
      mongoose.set('debug', true);
      return mongoose.connect(mongoUri, { useMongoClient: true });
      }
      
      module.exports = {
      connect,
      mongoose
      };
      
  4. В области Explorer в разделе server, создайте папку с именем environment. В папке environment создайте файл с именем environment.js.

  5. Из файла mongo.js нужно включить значения для параметров dbName, key и cosmosPort. Скопируйте следующий код в файл environment.js:

    // TODO: replace if yours are different
    module.exports = {
      accountName: 'your-cosmosdb-account-name-goes-here',
      databaseName: 'admin', 
      key: 'your-key-goes-here',
      port: 10255
    };
    

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

Для подключения приложения к Azure Cosmos DB вам потребуется обновить параметры конфигурации этого приложения. Чтобы обновить параметры, выполните следующие шаги:

  1. На портале Azure получите номер порта, имя учетной записи Azure Cosmos DB и значение ее первичного ключа.

  2. В файле environment.js измените значение port на 10255.

    const port = 10255;
    
  3. В файле environment.js измените значение accountName на имя учетной записи Azure Cosmos DB, которая была создана на шаге 4 руководства.

  4. Получите первичный ключ для учетной записи Azure Cosmos DB, использовав следующую команду CLI в окне терминала:

    az cosmosdb keys list --name <cosmosdb-name> -g myResourceGroup
    

    <cosmosdb-name> — имя учетной записи Azure Cosmos DB, созданной в четвертой части данного руководства.

  5. Скопируйте первичный ключ в файл environment.js как значение key.

Теперь ваше приложение имеет все необходимые сведения для подключения к Azure Cosmos DB.

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

Далее необходимо определить схему данных для хранения в Azure Cosmos DB, определив файл модели. Выполните следующие действия, чтобы создать модель Hero, определяющую схему данных:

  1. В области Explorer в папке server создайте файл с именем hero.model.js.

  2. Скопируйте следующий код в файл hero.model.js. Этот код предоставляет следующие функциональные возможности:

    • Требуется Mongoose.
    • Создает новую схему с идентификатором, именем и фразой.
    • Создает модель с помощью схемы.
    • Экспортирует модель.
    • Коллекция должна называться Heroes (а не Heros, как бы она называлась по умолчанию в соответствии с правилами именования Mongoose для множественного числа).
    const mongoose = require('mongoose');
    
    const Schema = mongoose.Schema;
    
    const heroSchema = new Schema(
      {
        id: { type: Number, required: true, unique: true },
        name: String,
        saying: String
      },
      {
        collection: 'Heroes'
      }
    );
    
    const Hero = mongoose.model('Hero', heroSchema);
    
    module.exports = Hero;
    

Создание службы Hero

После создания модели Hero нужно определить службу для чтения данных, а также выполнения операций перечисления, создания, удаления и обновления. Выполните следующие действия для создания службы Hero, которая запрашивает данные из Azure Cosmos DB:

  1. В области Explorer в папке server создайте файл с именем hero.service.js.

  2. Скопируйте приведенный ниже код в файл hero.service.js. Этот код предоставляет следующие функциональные возможности:

    • Получает созданную модель.
    • Подключается к базе данных.
    • Создает переменную docquery, которая использует метод hero.find для определения запроса, возвращающего всех героев.
    • Выполняет запрос с помощью функции docquery.exec с обещанием получить список всех героев, где статус ответа равен 200.
    • Если для состояния установлено значение 500, возвращается сообщение об ошибке.
    • Поскольку мы используем модули, извлекаются герои.
    const Hero = require('./hero.model');
    
    require('./mongo').connect();
    
    function getHeroes() {
      const docquery = Hero.find({});
      docquery
        .exec()
        .then(heroes => {
          res.status(200).json(heroes);
        })
        .catch(error => {
          res.status(500).send(error);
          return;
        });
    }
    
    module.exports = {
      getHeroes
    };
    

Настройка маршрутов

Теперь необходимо настроить маршруты для обработки URL-адресов для запросов на получение, создание, чтение и удаление. Методы маршрутизации указывают функции обратного вызова, также называемые функциями обработчика. Эти функции вызываются, когда приложение получает запрос к указанной конечной точке и метод HTTP. Используйте следующие шаги, чтобы добавить службу Hero и определить свои маршруты:

  1. В Visual Studio Code в файле routes.js закомментируйте функцию res.send, которая отправляет пример данных hero. Вместо нее добавьте строку для вызова функции heroService.getHeroes.

    router.get('/heroes', (req, res) => {
      heroService.getHeroes(req, res);
    //  res.send(200, [
    //      {"id": 10, "name": "Starlord", "saying": "oh yeah"}
    //  ])
    });
    
  2. В файле routes.js добавьте для службы Hero команду require:

    const heroService = require('./hero.service'); 
    
  3. В файле hero.service.js обновите функцию getHeroes, чтобы она принимала параметры req и res, как показано ниже:

    function getHeroes(req, res) {
    

Давайте выделим пару минут на проверку и просмотрим предыдущий код. Сначала мы переходим к файлу index.js, который задает сервер узла. Обратите внимание, что он настраивает и определяет ваши маршруты. Затем файл routes.js обращается к службе Hero и дает ей команду получить функции, например getHeroes, а также передать запрос и ответ. Файл hero.service.js получает модель и подключается к Mongo. При вызове он выполняет getHeroes и возвращает обратно ответ 200.

Запуск приложения

Затем выполните приложение, следуя приведенным ниже шагам:

  1. Сохраните все изменения в Visual Studio Code. В левой части экрана нажмите кнопку Отладка (), а затем нажмите кнопку Начать отладку ().

  2. Теперь переключитесь на браузер. Откройте Средства для разработчиков и вкладку "Сеть". Перейдите по адресу http://localhost:3000, и вы увидите наше приложение.

    Новая учетная запись Azure Cosmos DB на портале Azure

В приложении пока нет сохранённых героев. В следующей части этого руководства мы добавим функции put, push и delete. Затем мы сможем добавлять, обновлять и удалять героев из пользовательского интерфейса, используя подключения Mongoose к базе данных Azure Cosmos DB.

Очистите ресурсы

Вы можете удалить группу ресурсов, учетную запись Azure Cosmos DB и все связанные ресурсы, когда они больше не нужны. Чтобы удалить группу ресурсов, выполните шаги, описанные ниже:

  1. Перейдите к группе ресурсов, в которой вы создали учетную запись Azure Cosmos DB.
  2. Выберите команду Удалить группу ресурсов.
  3. Подтвердите имя удаляемой группы ресурсов и выберите Удалить.

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

Приступите к части 6 руководства и добавьте в приложение функции Post, Put и Delete:

Пытаетесь составить план мощностей для миграции в Azure Cosmos DB? Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.