Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ПРИМЕНЯЕТСЯ К:
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:
Установите модуль npm mongoose, который является API, используемым для обмена данными с MongoDB.
npm install mongoose@5.13.15 --saveImportant
Azure Cosmos DB для MongoDB совместим с версией Mongoose, вплоть до
5.13.15. Дополнительные сведения см. в обсуждении проблемы в репозитории GitHub Mongoose.В папке server создайте файл с именем mongo.js. Затем добавьте в этот файл сведения о подключении учетной записи Azure Cosmos DB.
Скопируйте следующий код в файл 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 };
В области Explorer в разделе server, создайте папку с именем environment. В папке environment создайте файл с именем environment.js.
Из файла 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 вам потребуется обновить параметры конфигурации этого приложения. Чтобы обновить параметры, выполните следующие шаги:
На портале Azure получите номер порта, имя учетной записи Azure Cosmos DB и значение ее первичного ключа.
В файле environment.js измените значение
portна 10255.const port = 10255;В файле environment.js измените значение
accountNameна имя учетной записи Azure Cosmos DB, которая была создана на шаге 4 руководства.Получите первичный ключ для учетной записи Azure Cosmos DB, использовав следующую команду CLI в окне терминала:
az cosmosdb keys list --name <cosmosdb-name> -g myResourceGroup<cosmosdb-name> — имя учетной записи Azure Cosmos DB, созданной в четвертой части данного руководства.
Скопируйте первичный ключ в файл environment.js как значение
key.
Теперь ваше приложение имеет все необходимые сведения для подключения к Azure Cosmos DB.
Создание модели Hero
Далее необходимо определить схему данных для хранения в Azure Cosmos DB, определив файл модели. Выполните следующие действия, чтобы создать модель Hero, определяющую схему данных:
В области Explorer в папке server создайте файл с именем hero.model.js.
Скопируйте следующий код в файл 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:
В области Explorer в папке server создайте файл с именем hero.service.js.
Скопируйте приведенный ниже код в файл 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 и определить свои маршруты:
В 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"} // ]) });В файле routes.js добавьте для службы Hero команду
require:const heroService = require('./hero.service');В файле hero.service.js обновите функцию
getHeroes, чтобы она принимала параметрыreqиres, как показано ниже:function getHeroes(req, res) {
Давайте выделим пару минут на проверку и просмотрим предыдущий код. Сначала мы переходим к файлу index.js, который задает сервер узла. Обратите внимание, что он настраивает и определяет ваши маршруты. Затем файл routes.js обращается к службе Hero и дает ей команду получить функции, например getHeroes, а также передать запрос и ответ. Файл hero.service.js получает модель и подключается к Mongo. При вызове он выполняет getHeroes и возвращает обратно ответ 200.
Запуск приложения
Затем выполните приложение, следуя приведенным ниже шагам:
Сохраните все изменения в Visual Studio Code. В левой части экрана нажмите кнопку Отладка (
), а затем нажмите кнопку Начать отладку (
).Теперь переключитесь на браузер. Откройте Средства для разработчиков и вкладку "Сеть". Перейдите по адресу
http://localhost:3000, и вы увидите наше приложение.
В приложении пока нет сохранённых героев. В следующей части этого руководства мы добавим функции put, push и delete. Затем мы сможем добавлять, обновлять и удалять героев из пользовательского интерфейса, используя подключения Mongoose к базе данных Azure Cosmos DB.
Очистите ресурсы
Вы можете удалить группу ресурсов, учетную запись Azure Cosmos DB и все связанные ресурсы, когда они больше не нужны. Чтобы удалить группу ресурсов, выполните шаги, описанные ниже:
- Перейдите к группе ресурсов, в которой вы создали учетную запись Azure Cosmos DB.
- Выберите команду Удалить группу ресурсов.
- Подтвердите имя удаляемой группы ресурсов и выберите Удалить.
Дальнейшие действия
Приступите к части 6 руководства и добавьте в приложение функции Post, Put и Delete:
Пытаетесь составить план мощностей для миграции в Azure Cosmos DB? Для планирования ресурсов можно использовать сведения об имеющемся кластере базы данных.
- Если вам известно только количество виртуальных ядер и серверов в существующем кластере баз данных, прочитайте об оценке единиц запроса с использованием виртуальных ядер или виртуальных процессоров.
- Если вы знаете типичные частоты запросов для текущей рабочей нагрузки базы данных, ознакомьтесь с оценкой единиц запросов с помощью планировщика емкости Azure Cosmos DB.