Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm erstellen Sie eine Node.js Webanwendung, die eine Verbindung mit Azure DocumentDB herstellt. Der MongoDB-, Express-, React.js-, Node.js (MERN)-Stapel ist eine beliebte Sammlung von Technologien, mit denen viele moderne Webanwendungen erstellt werden. Mit Azure DocumentDB können Sie eine neue Webanwendung erstellen oder eine vorhandene Anwendung mithilfe von MongoDB-Treibern migrieren, mit denen Sie bereits vertraut sind. In diesem Tutorial erfahren Sie:
- Richten Sie Ihre Umgebung ein
- Testen der MERN-Anwendung mit einem lokalen MongoDB-Container
- Testen der MERN-Anwendung mit einem Cluster
- Bereitstellen der MERN-Anwendung für Azure App Service
Voraussetzungen
Für dieses Tutorial benötigen Sie die folgenden Ressourcen:
Ein Azure-Abonnement
- Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto
Ein vorhandener Azure DocumentDB-Cluster
- Wenn Sie keinen Cluster haben, erstellen Sie einen neuen Cluster.
- Ein GitHub-Konto mit GitHub Codespaces-Berechtigungen
Konfigurieren der Entwicklungsumgebung
Eine Entwicklungscontainerumgebung ist mit allen Abhängigkeiten verfügbar, die erforderlich sind, um jede Übung in diesem Projekt abzuschließen. Sie können den Entwicklungscontainer in GitHub Codespaces oder lokal mit Visual Studio Code ausführen.
GitHub Codespaces führt einen Entwicklungscontainer aus, der von GitHub mit Visual Studio Code für das Web als Benutzeroberfläche verwaltet wird. Verwenden Sie für die einfachste Entwicklungsumgebung GitHub Codespaces, damit Sie die richtigen Entwicklertools und Abhängigkeiten vorinstalliert haben, um dieses Schulungsmodul abzuschließen.
Von Bedeutung
Alle GitHub-Konten können Codespaces für bis zu 60 Stunden kostenlos jeden Monat mit zwei Kerninstanzen verwenden.
Starten Sie den Prozess, um einen neuen GitHub Codespace im Branch
maindes GitHub-Repositorysazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-appzu erstellen.Überprüfen Sie auf der Seite Erstellen von Codespace- die Codespace-Konfigurationseinstellungen, und wählen Sie dann Neuen Codespace erstellen
Warten Sie, bis der Codespace gestartet wird. Dieser Startvorgang kann einige Minuten dauern.
Öffnen Sie ein neues Terminal im Codespace.
Überprüfen Sie die Versionen der Tools, die Sie in diesem Lernprogramm verwenden.
docker --version node --version npm --version az --versionHinweis
Dieses Lernprogramm erfordert die folgenden Versionen jedes Tools, die in Ihrer Umgebung vorinstalliert sind:
Tool Version Docker ≥ 20.10.0 Node.js ≥ 18.0150 npm ≥ 9.5.0 Azure-Befehlszeilenschnittstelle (Azure CLI) ≥ 2.46.0 Schließen Sie das Terminal.
Die verbleibenden Schritte in diesem Lernprogramm finden im Kontext dieses Entwicklungscontainers statt.
Testen der MERN-Anwendungs-API mit dem MongoDB-Container
Führen Sie zunächst die API der Beispielanwendung mit dem lokalen MongoDB-Container aus, um zu überprüfen, ob die Anwendung funktioniert.
Führen Sie einen MongoDB-Container mit Docker aus, und veröffentlichen Sie den typischen MongoDB-Port (
27017).docker pull mongo:6.0 docker run --detach --publish 27017:27017 mongo:6.0Wählen Sie in der Seitenleiste die MongoDB-Erweiterung aus.
Fügen Sie eine neue Verbindung zur MongoDB-Erweiterung mithilfe der Verbindungszeichenfolge
mongodb://localhosthinzu.
Sobald die Verbindung erfolgreich ist, öffnen Sie die Datei data/products.mongodb playground.
Wählen Sie das Symbol "Alle ausführen" aus, um das Skript auszuführen.
Der Testlauf sollte zu einer Liste von Dokumenten in der lokalen MongoDB-Collection führen. Hier ist ein gekürztes Beispiel für das Ergebnis.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Hinweis
Die Objektbezeichner (
_id) werden zufällig generiert und unterscheiden sich von dieser abgeschnittenen Beispielausgabe.Erstellen Sie im Server/ Verzeichnis eine neue env-Datei .
Fügen Sie in der Datei "server/.env " eine Umgebungsvariable für diesen Wert hinzu:
Umgebungsvariable Wert CONNECTION_STRINGDie Verbindungszeichenfolge mit dem Azure DocumentDB-Cluster. Verwenden Sie vorerst mongodb://localhost:27017?directConnection=true.CONNECTION_STRING=mongodb://localhost:27017?directConnection=trueÄndern Sie den Kontext des Terminals in den Server/ Ordner.
cd serverInstallieren Sie die Abhängigkeiten vom Node Package Manager (npm).
npm installStarten Sie die Node.js & Express-Anwendung.
npm startDie API öffnet automatisch ein Browserfenster, um zu überprüfen, ob ein Array von Produktdokumenten zurückgegeben wird.
Schließen Sie die zusätzliche Browserregisterkarte/das zusätzliche Fenster.
Schließen Sie das Terminal.
Testen der MERN-Anwendung mit dem Azure DocumentDB-Cluster
Überprüfen wir nun, ob die Anwendung nahtlos mit Azure DocumentDB funktioniert. Füllen Sie für diese Aufgabe den bereits vorhandenen Cluster mit Seeddaten mithilfe der MongoDB-Shell auf, und aktualisieren Sie dann die Verbindungszeichenfolge der API.
Melden Sie sich beim Azure-Portal (https://portal.azure.com) an.
Navigieren Sie zur vorhandenen Azure DocumentDB-Clusterseite.
Wählen Sie auf der Azure DocumentDB-Clusterseite die Navigationsmenüoption "Verbindungszeichenfolgen " aus.
Notieren Sie den Wert aus dem Feld "Verbindungszeichenfolge ".
Von Bedeutung
Die Verbindungszeichenfolge im Portal enthält nicht die Benutzernamen- und Kennwortwerte. Sie müssen die Platzhalter
<user>und<password>durch die Anmeldeinformationen ersetzen, die Sie bei der ursprünglichen Erstellung des Clusters verwendet haben.Öffnen Sie ein neues Terminal in Ihrer integrierten Entwicklungsumgebung (IDE).
Starten Sie die MongoDB-Shell mit dem
mongoshBefehl und der Verbindungszeichenfolge, die Sie zuvor aufgezeichnet haben. Stellen Sie sicher, dass Sie die Platzhalter<user>und<password>durch die Anmeldeinformationen ersetzen, die Sie beim ursprünglichen Erstellen des Clusters verwendet haben.mongosh "<mongodb-cluster-connection-string>"Hinweis
Möglicherweise müssen Sie bestimmte Werte für die Verbindungszeichenfolge codieren. In diesem Beispiel lautet
msdocs-azure-documentdb-tutorialder Name des Clusters , der Benutzername lautetclusteradmin, und das Kennwort lautetP@ssw.rd. Im Kennwort muss das@Zeichen mit%40codiert werden. Hier wird eine Beispielverbindungszeichenfolge mit der richtigen Codierung des Kennworts bereitgestellt.CONNECTION_STRING=mongodb+srv://clusteradmin:P%40ssw.rd@msdocs-azure-documentdb-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000Führen Sie in der Shell die folgenden Befehle aus, um Ihre Datenbank zu erstellen, Ihre Sammlung zu erstellen und mit Startdaten zu seeden.
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({});Die Befehle sollten zu einer Liste von Dokumenten in der lokalen MongoDB-Auflistung führen. Hier sehen Sie ein gekürztes Beispiel für die Ausgabe.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Hinweis
Die Objektbezeichner (
_id) werden zufällig generiert und unterscheiden sich von dieser abgeschnittenen Beispielausgabe.Beenden Sie die MongoDB-Shell.
exitErstellen Sie im Client/ Verzeichnis eine neue env-Datei .
Fügen Sie in der Datei "client/.env " eine Umgebungsvariable für diesen Wert hinzu:
Umgebungsvariable Wert CONNECTION_STRINGDie Verbindungszeichenfolge mit dem Azure DocumentDB-Cluster. Verwenden Sie dieselbe Verbindungszeichenfolge, die Sie mit der Mongo-Shell verwendet haben. CONNECTION_STRING=<your-connection-string>Überprüfen Sie, ob die Anwendung den Datenbankdienst verwendet, indem Sie den Kontext des Terminals in den Server/ Ordner ändern, Abhängigkeiten vom Node Package Manager (npm) installieren und dann die Anwendung starten.
cd server npm install npm startDie API öffnet automatisch ein Browserfenster, um zu überprüfen, ob ein Array von Produktdokumenten zurückgegeben wird.
Schließen Sie die zusätzliche Browserregisterkarte bzw. das zusätzliche Browserfenster. Schließen Sie dann das Terminal.
Bereitstellen der MERN-Anwendung für Azure App Service
Beweisen Sie, dass die Anwendung end-to-End funktioniert, indem Sie den Dienst und den Client für Azure App Service bereitstellen. Verwenden Sie geheime Schlüssel in den Web-Apps, um Umgebungsvariablen mit Anmeldeinformationen und API-Endpunkten zu speichern.
Öffnen Sie in Ihrer integrierten Entwicklungsumgebung (IDE) ein neues Terminal.
Erstellen Sie eine Shellvariable für den Namen der bereits vorhandenen Ressourcengruppe mit dem Namen "resourceGroupName".
# Variable for resource group name resourceGroupName="<existing-resource-group>"Erstellen Sie Shellvariablen für die beiden Web-App mit dem Namen "serverAppName " und "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"Falls noch nicht geschehen, melden Sie sich mit dem
az login --use-device-codeBefehl bei der Azure CLI an.Ändern Sie das aktuelle Arbeitsverzeichnis auf den Server/ Pfad.
cd serverErstellen Sie eine neue Web-App für die Serverkomponente der MERN-Anwendung mit
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $serverAppName \ --sku F1 \ --runtime "NODE|18-lts"Erstellen Sie eine neue Verbindungszeichenfolgen-Einstellung für die Server-Web-App namens
CONNECTION_STRINGmitaz webapp config connection-string set. Verwenden Sie denselben Wert für die Verbindungszeichenfolge, die Sie mit der MongoDB-Shell und der env-Datei weiter oben in diesem Lernprogramm verwendet haben.az webapp config connection-string set \ --resource-group $resourceGroupName \ --name $serverAppName \ --connection-string-type custom \ --settings "CONNECTION_STRING=<mongodb-connection-string>"Rufen Sie den URI für die Server-Webanwendung ab
az webapp showund speichern Sie ihn in der Shell-Variablen mit dem Namen d serverUri.serverUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $serverAppName \ --query hostNames[0] \ --output tsv)Verwenden Sie das Paket
open-cliund den Befehl aus NuGet mitnpx, um mithilfe des URI für die Server-Web-App ein Browserfenster zu öffnen. Überprüfen Sie, ob die Server-App Ihre JSON-Arraydaten aus dem Cluster zurückgibt.npx open-cli "https://$serverUri/products" --yesTipp
Manchmal können Bereitstellungen asynchron abgeschlossen werden. Wenn Sie nicht sehen, was Sie erwarten, warten Sie eine weitere Minute, und aktualisieren Sie das Browserfenster.
Ändern Sie das Arbeitsverzeichnis in den Client/ Pfad.
cd ../clientErstellen Sie eine neue Web-App für die Clientkomponente der MERN-Anwendung mit
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $clientAppName \ --sku F1 \ --runtime "NODE|18-lts"Erstellen Sie eine neue App-Einstellung für die Clientweb-App namens
REACT_APP_API_ENDPOINTmitaz webapp config appsettings set. Verwenden Sie den Server-API-Endpunkt, der in der ServerUri-Shellvariable gespeichert ist.az webapp config appsettings set \ --resource-group $resourceGroupName \ --name $clientAppName \ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"Rufen Sie die URI für die Client-Web-App mit
az webapp showab und speichern Sie sie in der Shellvariablen mit dem Namen d clientUri.clientUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $clientAppName \ --query hostNames[0] \ --output tsv)Verwenden Sie das
open-cli-Paket und den Befehl von NuGet mitnpx, um ein Browserfenster mit dem URI für die Client-Web-App zu öffnen. Überprüfen Sie, ob die Client-App Daten aus der API der Server-App rendert.npx open-cli "https://$clientUri" --yesTipp
Manchmal können Bereitstellungen asynchron abgeschlossen werden. Wenn Sie nicht sehen, was Sie erwarten, warten Sie eine weitere Minute, und aktualisieren Sie das Browserfenster.
Schließen Sie das Terminal.
Bereinigen von Ressourcen
Wenn Sie in Ihrem eigenen Abonnement arbeiten, ist es ratsam, nach Abschluss eines Projekts die nicht mehr benötigten Ressourcen zu entfernen. Ressourcen, die weiterhin ausgeführt werden, können Sie Geld kosten. Sie können Ressourcen einzeln löschen oder die Ressourcengruppe löschen, um den gesamten Satz von Ressourcen zu löschen.
Um die gesamte Ressourcengruppe zu löschen, verwenden Sie
az group delete.az group delete \ --name $resourceGroupName \ --yesBestätigen Sie, dass die Ressourcengruppe mithilfe von
az group listgelöscht wurde.az group list
Bereinigen der Entwicklungsumgebung
Sie können auch Ihre Entwicklungsumgebung bereinigen oder sie in ihren typischen Zustand zurückversetzen.
Durch das Löschen der GitHub Codespaces-Umgebung wird sichergestellt, dass Sie die Anzahl der kostenlosen Berechtigungsstunden pro Kern maximieren können, die Sie für Ihr Konto erhalten.
Melden Sie sich beim GitHub Codespaces-Dashboard (https://github.com/codespaces) an.
Suchen Sie Ihren derzeit ausgeführten Entwicklungscontainer, der aus dem
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-appGitHub-Repository stammt.
Öffnen Sie das Kontextmenü für den Codespace, und wählen Sie dann Löschen aus.