Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questa esercitazione viene creata un'applicazione Web Node.js che si connette ad Azure DocumentDB. Lo stack MongoDB, Express, React.js, Node.js (MERN) è una raccolta comune di tecnologie usate per creare molte applicazioni Web moderne. Con Azure DocumentDB è possibile creare una nuova applicazione Web o eseguire la migrazione di un'applicazione esistente usando driver MongoDB già noti. In questa esercitazione, farai:
- Configurazione dell'ambiente
- Testare l'applicazione MERN con un contenitore MongoDB locale
- Testare l'applicazione MERN con un cluster
- Distribuire l'applicazione MERN nel servizio app di Azure
Prerequisiti
Per completare questa esercitazione, sono necessarie le risorse seguenti:
Una sottoscrizione di Azure
- Se non hai un abbonamento Azure, crea un account gratuito
Un cluster Di Azure DocumentDB esistente
- Se non si ha un cluster, creare un nuovo cluster
- Un account GitHub con accesso a GitHub Codespaces
Configurare l'ambiente di sviluppo
Un ambiente contenitore di sviluppo è disponibile con tutte le dipendenze necessarie per completare ogni esercizio in questo progetto. È possibile eseguire il contenitore di sviluppo in GitHub Codespaces o in locale usando Visual Studio Code.
GitHub Codespaces esegue un contenitore di sviluppo gestito da GitHub con Visual Studio Code per il Web come interfaccia utente. Per l'ambiente di sviluppo più semplice, usare GitHub Codespaces in modo che siano preinstallati gli strumenti di sviluppo e le dipendenze corretti per completare questo modulo di training.
Importante
Tutti gli account GitHub possono usare Codespaces per un massimo di 60 ore gratuite ogni mese con due istanze principali.
Avvia il processo per creare un nuovo Codespace di GitHub sul ramo
maindel repository GitHubazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app.Nella pagina Crea spazio codici esaminare le impostazioni di configurazione dello spazio di codice e quindi selezionare Crea nuovo spazio di codice
Screenshot della schermata di conferma prima di creare un nuovo codespace.
Attendere l'avvio dello spazio di codice. Questo processo di avvio può richiedere alcuni minuti.
Aprire un nuovo terminale nello spazio di codice.
Controllare le versioni degli strumenti usati in questa esercitazione.
docker --version node --version npm --version az --versionAnnotazioni
Questa esercitazione richiede le versioni seguenti di ogni strumento, preinstallate nell'ambiente:
Tool Versione Docker ≥ 20.10.0 Node.js ≥ 18.0150 npm ≥ 9.5.0 Azure CLI ≥ 2.46.0 Chiudere il terminale.
I passaggi rimanenti di questa esercitazione si svolgono nel contesto di questo contenitore di sviluppo.
Testare l'API dell'applicazione MERN con il contenitore MongoDB
Per iniziare, eseguire l'API dell'applicazione di esempio con il contenitore MongoDB locale per verificare il funzionamento dell'applicazione.
Eseguire un contenitore MongoDB usando Docker e pubblicare la porta MongoDB tipica (
27017).docker pull mongo:6.0 docker run --detach --publish 27017:27017 mongo:6.0Nella barra laterale selezionare l'estensione MongoDB.
Aggiungere una nuova connessione all'estensione MongoDB usando la stringa
mongodb://localhostdi connessione .
Una volta stabilita la connessione con successo, aprire il file data/products.mongodb playground.
Selezionare l'icona Esegui tutto per eseguire lo script.
L'esecuzione del playground dovrebbe generare un elenco di documenti nella raccolta MongoDB locale. Ecco un esempio troncato dell'output.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Annotazioni
Gli identificatori di oggetto (
_id) vengono generati in modo casuale e differiscono da questo output di esempio troncato.Nella directory server/ creare un nuovo file con estensione env .
Nel file server/.env aggiungere una variabile di ambiente per questo valore:
Variabile di ambiente Value CONNECTION_STRINGStringa di connessione al cluster Azure DocumentDB. Per il momento, usare mongodb://localhost:27017?directConnection=true.CONNECTION_STRING=mongodb://localhost:27017?directConnection=trueModificare il contesto del terminale alla cartella server/.
cd serverInstallare le dipendenze da Node Package Manager (npm).
npm installAvviare l'applicazione Node.js & Express.
npm startL'API apre automaticamente una finestra del browser per verificare che restituisca una matrice di documenti di prodotto.
Chiudere la scheda/finestra del browser aggiuntiva.
Chiudere il terminale.
Testare l'applicazione MERN con il cluster Azure DocumentDB
A questo punto, è possibile verificare che l'applicazione funzioni perfettamente con Azure DocumentDB. Per questa attività, popolare il cluster preesistente con i dati di inizializzazione usando la shell MongoDB e quindi aggiornare la stringa di connessione dell'API.
Accedere al portale di Azure (https://portal.azure.com).
Passare alla pagina del cluster Azure DocumentDB esistente.
Selezionare l'opzione Stringhe di connessione dal menu di navigazione nella pagina del cluster di Azure DocumentDB.
Registrare il valore dal campo Stringa di connessione .
Importante
La stringa di connessione nel portale non include i valori di nome utente e password. È necessario sostituire i
<user>segnaposto e<password>con le credenziali usate durante la creazione del cluster.Aprire un nuovo terminale all'interno dell'ambiente di sviluppo integrato (IDE).
Avviare la shell mongoDB usando il
mongoshcomando e la stringa di connessione registrata in precedenza. Assicurarsi di sostituire i<user>segnaposto e<password>con le credenziali usate durante la creazione del cluster.mongosh "<mongodb-cluster-connection-string>"Annotazioni
Potrebbe essere necessario codificare valori specifici per la stringa di connessione. In questo esempio il nome del cluster è
msdocs-azure-documentdb-tutorial, il nome utente èclusteradmine la password èP@ssw.rd. Nella password il@carattere deve essere codificato usando%40. Di seguito viene fornita una stringa di connessione di esempio con la codifica corretta della password.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=120000Nella shell eseguire i comandi seguenti per creare il database, creare la raccolta e eseguire il seeding con i dati di avvio.
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({});I comandi devono generare un elenco di documenti nella raccolta MongoDB locale. Ecco un esempio troncato dell'output.
[ { "_id": { "$oid": "640a146e89286b79b6628eef" }, "name": "Confira Watch", "category": "watches", "price": 105 }, { "_id": { "$oid": "640a146e89286b79b6628ef0" }, "name": "Diannis Watch", "category": "watches", "price": 98, "sale": true }, ... ]Annotazioni
Gli identificatori di oggetto (
_id) vengono generati in modo casuale e differiscono da questo output di esempio troncato.Uscire dalla shell MongoDB.
exitNella directory client/ creare un nuovo file .env.
Nel file client/.env aggiungere una variabile di ambiente per questo valore:
Variabile di ambiente Value CONNECTION_STRINGStringa di connessione al cluster Azure DocumentDB. Usare la stessa stringa di connessione usata con la shell mongo. CONNECTION_STRING=<your-connection-string>Verificare che l'applicazione usi il servizio di database modificando il contesto del terminale nella cartella server/server , installando le dipendenze da Gestione pacchetti node (npm) e quindi avviando l'applicazione.
cd server npm install npm startL'API apre automaticamente una finestra del browser per verificare che restituisca una matrice di documenti di prodotto.
Chiudere la scheda/finestra del browser aggiuntiva. Chiudere quindi il terminale.
Distribuire l'applicazione MERN nel servizio app di Azure
Dimostrare che l'applicazione funziona end-to-end distribuendo il servizio e il client nel servizio app di Azure. Usare i segreti nelle app Web per archiviare le variabili di ambiente con credenziali ed endpoint API.
All'interno dell'ambiente di sviluppo integrato aprire un nuovo terminale.
Creare una variabile della shell per il nome del gruppo di risorse preesistente denominato resourceGroupName.
# Variable for resource group name resourceGroupName="<existing-resource-group>"Creare variabili della shell per le due app Web denominate serverAppName e 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"Se non l'hai già fatto, accedi alla CLI di Azure usando il comando
az login --use-device-code.Modificare la directory di lavoro corrente nel percorso server/.
cd serverCreare una nuova app Web per il componente server dell'applicazione MERN con
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $serverAppName \ --sku F1 \ --runtime "NODE|18-lts"Creare una nuova impostazione della stringa di connessione per l'app Web server denominata
CONNECTION_STRINGconaz webapp config connection-string set. Usare lo stesso valore per la stringa di connessione usata con la shell MongoDB e il file con estensione env più indietro in questa esercitazione.az webapp config connection-string set \ --resource-group $resourceGroupName \ --name $serverAppName \ --connection-string-type custom \ --settings "CONNECTION_STRING=<mongodb-connection-string>"Ottenere l'URI per l'app Web server con
az webapp showe archiviarlo in un nome di variabile shell d serverUri.serverUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $serverAppName \ --query hostNames[0] \ --output tsv)Usare il pacchetto
open-clie il comando da NuGet connpxper aprire una finestra del browser usando l'URI per l'applicazione web del server. Verificate che l'app server stia restituendo i dati dell'array JSON dal cluster.npx open-cli "https://$serverUri/products" --yesSuggerimento
A volte le distribuzioni possono terminare in modo asincrono. Se non viene visualizzato quello previsto, attendere un altro minuto e aggiornare la finestra del browser.
Modificare la directory di lavoro impostando il percorso /client .
cd ../clientCreare una nuova app Web per il componente client dell'applicazione MERN con
az webapp up.az webapp up \ --resource-group $resourceGroupName \ --name $clientAppName \ --sku F1 \ --runtime "NODE|18-lts"Creare una nuova impostazione dell'app per l'app Web client denominata
REACT_APP_API_ENDPOINTconaz webapp config appsettings set. Usare l'endpoint API server archiviato nella variabile della shell serverUri.az webapp config appsettings set \ --resource-group $resourceGroupName \ --name $clientAppName \ --settings "REACT_APP_API_ENDPOINT=https://$serverUri"Ottenere l'URI per l'app Web client con
az webapp showe archiviarlo in un nome di variabile shell d clientUri.clientUri=$(az webapp show \ --resource-group $resourceGroupName \ --name $clientAppName \ --query hostNames[0] \ --output tsv)Usare il pacchetto e il comando
open-clida NuGet connpxper aprire una finestra del browser usando l'URI per l'app Web client. Verificare che l'app client stia visualizzando i dati dall'API dell'app server.npx open-cli "https://$clientUri" --yesSuggerimento
A volte le distribuzioni possono terminare in modo asincrono. Se non viene visualizzato quello previsto, attendere un altro minuto e aggiornare la finestra del browser.
Chiudere il terminale.
Pulire le risorse
Quando si lavora nel proprio abbonamento, alla fine di un progetto è opportuno rimuovere le risorse che non sono più necessarie. Le risorse lasciate in funzione possono costarti denaro. È possibile eliminare risorse singole oppure gruppi di risorse per eliminare l'intero set di risorse.
Per eliminare l'intero gruppo di risorse, usare
az group delete.az group delete \ --name $resourceGroupName \ --yesVerificare che il gruppo di risorse venga eliminato usando
az group list.az group list
Pulire l'ambiente di sviluppo
È anche possibile pulire l'ambiente di sviluppo o restituirlo allo stato tipico.
L'eliminazione dell'ambiente GitHub Codespaces garantisce di massimizzare le ore gratuite per singolo core a cui si ha diritto per l'account.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare il contenitore di sviluppo attualmente in esecuzione originato dal
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-apprepository GitHub.
Aprire il menu di scelta rapida per il codespace e quindi selezionare Elimina.
Screenshot del menu contestuale per un singolo codespace con l'opzione di eliminazione evidenziata.
Screenshot dell'opzione di menu per aprire un nuovo terminale.