Руководство по подключению веб-приложения Node.js к Azure Cosmos DB для MongoDB (vCore)
Область применения: Виртуальные ядра MongoDB
В этом руководстве вы создадите веб-приложение Node.js, которое подключается к Azure Cosmos DB для MongoDB в архитектуре виртуальных ядер. Стек MongoDB, Express, React.js, Node.js (MERN) — это популярная коллекция технологий, используемых для создания многих современных веб-приложений. С помощью Azure Cosmos DB для MongoDB (vCore) можно создать новое веб-приложение или перенести существующее приложение с помощью драйверов MongoDB, с которыми вы уже знакомы. Изучив это руководство, вы:
- Настройка среды
- Тестирование приложения MERN с помощью локального контейнера MongoDB
- Тестирование приложения MERN с помощью кластера виртуальных ядер
- Развертывание приложения MERN в службе приложение Azure
Необходимые компоненты
Для работы с этим учебником требуются следующие ресурсы:
- Существующий кластер виртуальных ядер.
- Учетная запись GitHub.
- GitHub поставляется с бесплатными часами Codespaces для всех пользователей.
Настройка среды разработки
Среда контейнера разработки доступна со всеми зависимостями, необходимыми для выполнения каждого упражнения в этом проекте. Контейнер разработки можно запустить в GitHub Codespaces или локально с помощью Visual Studio Code.
GitHub Codespaces запускает контейнер разработки, управляемый GitHub, с Помощью Visual Studio Code для Интернета в качестве пользовательского интерфейса. Для наиболее простой среды разработки используйте GitHub Codespaces, чтобы у вас были правильные средства разработчика и зависимости, предварительно установленные для выполнения этого модуля обучения.
Внимание
Все учетные записи GitHub могут использовать пространства Кода до 60 часов бесплатно каждый месяц с 2 основными экземплярами.
Запустите процесс создания нового пространства кода GitHub в
main
ветвиazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app
репозитория GitHub.На странице "Создание пространства кода" просмотрите параметры конфигурации пространства кода и выберите "Создать новое пространство кода"
Дождитесь запуска пространства кода. Этот процесс запуска может занять несколько минут.
Откройте новый терминал в пространстве кода.
Проверьте версии инструментов, используемых в этом руководстве.
docker --version node --version npm --version az --version
Примечание.
В этом руководстве требуются следующие версии каждого средства, предварительно установленного в вашей среде:
Средство Версия Docker ≥ 20.10.0 Node.js ≥ 18.0150 NPM ≥ 9.5.0 Azure CLI ≥ 2.46.0 Закройте терминал.
Остальные действия, описанные в этом руководстве, происходят в контексте этого контейнера разработки.
Тестирование API приложения MERN с помощью контейнера MongoDB
Начните с запуска API примера приложения с локальным контейнером MongoDB, чтобы убедиться, что приложение работает.
Запустите контейнер MongoDB с помощью Docker и опубликуйте типичный порт MongoDB (
27017
).docker pull mongo:6.0 docker run --detach --publish 27017:27017 mongo:6.0
На боковой панели выберите расширение MongoDB.
Добавьте новое подключение к расширению MongoDB с помощью строка подключения
mongodb://localhost
.После успешного подключения откройте файл игровой площадки data/products.mongodb .
Щелкните значок "Выполнить все", чтобы выполнить скрипт.
Запуск игровой площадки должен привести к списку документов в локальной коллекции MongoDB. Ниже приведен усеченный пример выходных данных.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]
Примечание.
Идентификаторы объектов (
_id
) создаются случайным образом и отличаются от выходных данных этого усеченного примера.Создайте в каталоге или сервере новый ENV-файл .
В файле server/.env добавьте переменную среды для этого значения:
Переменная среды Значение CONNECTION_STRING
Строка подключения в кластер Azure Cosmos DB для MongoDB (vCore). Сейчас используйте mongodb://localhost:27017?directConnection=true
.CONNECTION_STRING=mongodb://localhost:27017?directConnection=true
Измените контекст терминала на сервер или папку.
cd server
Установите зависимости из узла диспетчер пакетов (npm).
npm install
Запустите приложение Node.js и Express.
npm start
API автоматически открывает окно браузера, чтобы убедиться, что он возвращает массив документов продукта.
Закройте дополнительную вкладку или окно браузера.
Закройте терминал.
Тестирование приложения MERN с помощью кластера Azure Cosmos DB для MongoDB (vCore)
Теперь давайте проверим, что приложение работает без проблем с Azure Cosmos DB для MongoDB (vCore). Для этой задачи заполните предварительно существующий кластер начальными данными с помощью оболочки MongoDB, а затем обновите строка подключения API.
Войдите на портал Azure (https://portal.azure.com).
Перейдите на страницу существующего кластера Azure Cosmos DB для MongoDB (vCore).
На странице кластера Azure Cosmos DB для MongoDB (vCore) выберите пункт меню навигации по строкам подключения.
Запишите значение из поля строки подключения.
Внимание
Строка подключения на портале не включает значения имени пользователя и пароля. Необходимо заменить
<user>
<password>
заполнители учетными данными, которые вы использовали при первоначальном создании кластера.Вернитесь в интегрированную среду разработки (IDE), откройте новый терминал.
Запустите оболочку MongoDB с помощью
mongosh
команды и строка подключения, записанной ранее. Замените заполнители учетными данными, которые вы<user>
<password>
использовали при первоначальном создании кластера.mongosh "<mongodb-cluster-connection-string>"
Примечание.
Может потребоваться кодировать определенные значения для строка подключения. В этом примере имя кластера —
msdocs-cosmos-tutorial
clusteradmin
имя пользователя и парольP@ssw.rd
. В пароле@
символ должен быть закодирован с помощью%40
. Ниже приведен пример строка подключения с правильной кодировкой пароля.CONNECTION_STRING=mongodb+srv://clusteradmin:P%40ssw.rd@msdocs-cosmos-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000
В оболочке выполните следующие команды для создания базы данных, создания коллекции и начального значения данных.
use('cosmicworks'); db.products.drop(); db.products.insertMany([ { name: "Confira Watch", category: "watches", price: 105.00 }, { name: "Diannis Watch", category: "watches", price: 98.00, sale: true }, { name: "Sterse Gloves", category: "gloves", price: 42.00 }, { name: "Peache Sunglasses", category: "eyewear", price: 32.00, sale: false, sizes: [ "S", "M", "L" ] }, { name: "Icento Pack", category: "bags", price: 58.00 }, { name: "Iroowl Bracelet", category: "watches", price: 66.00 }, { name: "Glaark Bag", category: "bags", price: 56.00, sale: true }, { name: "Windry Mittens", category: "gloves", price: 35.00 }, { name: "Tuvila Hat", category: "hats", price: 120.00 }, { name: "Klinto Hat", category: "hats", subcategory: "hats-beanies", price: 65.00 } ]); db.products.find({});
Команды должны привести к списку документов в локальной коллекции MongoDB. Ниже приведен усеченный пример выходных данных.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]
Примечание.
Идентификаторы объектов (
_id
) создаются случайным образом и отличаются от выходных данных этого усеченного примера.Закройте оболочку MongoDB.
exit
В каталоге клиента или каталога создайте новый ENV-файл .
В файле client/.env добавьте переменную среды для этого значения:
Переменная среды Значение CONNECTION_STRING
Строка подключения в кластер Azure Cosmos DB для MongoDB (vCore). Используйте ту же строка подключения, которую вы использовали с оболочкой Mongo. CONNECTION_STRING=<your-connection-string>
Убедитесь, что приложение использует службу базы данных, изменив контекст терминала на сервер или папку, установив зависимости от узла диспетчер пакетов (npm), а затем запустите приложение.
cd server npm install npm start
API автоматически открывает окно браузера, чтобы убедиться, что он возвращает массив документов продукта.
Закройте дополнительную вкладку или окно браузера. Затем закройте терминал.
Развертывание приложения MERN в службе приложение Azure
Разверните службу и клиент в службе приложение Azure, чтобы доказать, что приложение работает комплексно. Используйте секреты в веб-приложениях для хранения переменных среды с учетными данными и конечными точками API.
В интегрированной среде разработки (IDE) откройте новый терминал.
Создайте переменную оболочки для имени предварительно существующей группы ресурсов с именем resourceGroupName.
# Variable for resource group name resourceGroupName="<existing-resource-group>"
Создайте переменные оболочки для двух веб-приложений с именем serverAppName и clientAppName.
# Variable for randomnly generated suffix let suffix=$RANDOM*$RANDOM # Variable for web app names with a randomnly generated suffix serverAppName="server-app-$suffix" clientAppName="client-app-$suffix"
Если вы еще этого не сделали, войдите в Azure CLI с помощью команды
az login --use-device-code
.Измените текущий рабочий каталог на сервер или путь.
cd server
Создайте веб-приложение для серверного компонента приложения MERN с
az webapp up
помощью .az webapp up \ --resource-group $resourceGroupName \ --name $serverAppName \ --sku F1 \ --runtime "NODE|18-lts"
Создайте новый параметр строка подключения для серверного веб-приложения с
az webapp config connection-string set
именемCONNECTION_STRING
. Используйте то же значение для строка подключения, который вы использовали с оболочкой MongoDB и ENV-файлом ранее в этом руководстве.az webapp config connection-string set \ --resource-group $resourceGroupName \ --name $serverAppName \ --connection-string-type custom \ --settings "CONNECTION_STRING=<mongodb-connection-string>"
Получите универсальный код ресурса (URI) для веб-приложения
az webapp show
сервера и сохраните его в имени переменной оболочки d serverUri.serverUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $serverAppName \ --query hostNames[0] \ --output tsv)
open-cli
Используйте пакет и команду из NuGet,npx
чтобы открыть окно браузера с помощью URI для веб-приложения сервера. Убедитесь, что серверное приложение возвращает данные массива JSON из кластера MongoDB (vCore).npx open-cli "https://$serverUri/products" --yes
Совет
Иногда развертывания могут выполняться асинхронно. Если вы не видите ожидаемые действия, подождите еще одну минуту и обновите окно браузера.
Измените рабочий каталог на клиент или путь.
cd ../client
Создайте веб-приложение для клиентского компонента приложения MERN с
az webapp up
помощью .az webapp up \ --resource-group $resourceGroupName \ --name $clientAppName \ --sku F1 \ --runtime "NODE|18-lts"
Создайте новый параметр приложения для клиентского веб-приложения с
az webapp config appsettings set
именемREACT_APP_API_ENDPOINT
. Используйте конечную точку API сервера, хранящуюся в переменной оболочки serverUri .az webapp config appsettings set \ --resource-group $resourceGroupName \ --name $clientAppName \ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"
Получите универсальный код ресурса (URI) для клиентского веб-приложения и
az webapp show
сохраните его в имени переменной оболочки d clientUri.clientUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $clientAppName \ --query hostNames[0] \ --output tsv)
open-cli
Используйте пакет и команду из NuGet,npx
чтобы открыть окно браузера с помощью URI для клиентского веб-приложения. Убедитесь, что клиентское приложение отображает данные из API серверного приложения.npx open-cli "https://$clientUri" --yes
Совет
Иногда развертывания могут выполняться асинхронно. Если вы не видите ожидаемые действия, подождите еще одну минуту и обновите окно браузера.
Закройте терминал.
Очистка ресурсов
Если вы работаете в своей подписке, после завершения проекта целесообразно удалить созданные ресурсы, которые вам больше не потребуются. Ресурсы, которые продолжат работать, могут быть платными. Вы можете удалить ресурсы по отдельности либо удалить всю группу ресурсов.
Чтобы удалить всю группу ресурсов, используйте
az group delete
.az group delete \ --name $resourceGroupName \ --yes
Убедитесь, что группа ресурсов удаляется с помощью
az group list
.az group list
Очистка среды разработки
Вы также можете очистить среду разработки или вернуть ее в типичное состояние.
Удаление среды GitHub Codespaces гарантирует, что вы можете максимально увеличить объем бесплатных прав на базовые часы, которые вы получаете для вашей учетной записи.
Войдите на панель мониторинга GitHub Codespaces (https://github.com/codespaces).
Найдите текущие пространства кода, полученные из
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app
репозитория GitHub.Откройте контекстное меню для пространства кода и нажмите кнопку "Удалить".
Следующий шаг
Теперь, когда вы создали свое первое приложение для кластера MongoDB (vCore), узнайте, как перенести данные в Azure Cosmos DB.