Esercitazione: Connettere un'app Web Node.js con Azure Cosmos DB per MongoDB (vCore)
SI APPLICA A: MongoDB vCore
In questa esercitazione viene creata un'applicazione Web Node.js che si connette ad Azure Cosmos DB per MongoDB nell'architettura vCore. Lo stack MongoDB, Express, React.js, Node.js (MERN) è una raccolta diffusa di tecnologie usate per creare molte applicazioni Web moderne. Con Azure Cosmos DB per MongoDB (vCore), è possibile creare una nuova applicazione Web o eseguire la migrazione di un'applicazione esistente usando driver MongoDB già noti. In questa esercitazione:
- Configurazione dell'ambiente
- Testare l'applicazione MERN con un contenitore MongoDB locale
- Testare l'applicazione MERN con un cluster vCore
- Distribuire l'applicazione MERN nel servizio app di Azure
Prerequisiti
Per completare l'esercitazione, sono necessarie le risorse seguenti:
- Un cluster vCore esistente.
- Un account GitHub.
- GitHub include ore di Codespaces gratuite per tutti gli utenti.
Configurare l'ambiente di sviluppo
È disponibile un ambiente contenitore di sviluppo 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 per disporre degli strumenti di sviluppo e delle dipendenze preinstallati corretti per completare questo modulo di formazione.
Importante
Tutti gli account GitHub possono usare Codespaces per un massimo di 60 ore gratuite ogni mese con 2 istanze di core.
Avviare il processo per creare un nuovo codespace GitHub nel ramo
main
del repository GitHubazure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app
.Nella pagina Crea codespace esaminare le impostazioni di configurazione del codespace e quindi selezionare Crea nuovo codespace
Attendere l'avvio del codespace. Questo processo di avvio può richiedere alcuni minuti.
Aprire un nuovo terminale nel codespace.
Controllare le versioni degli strumenti usati in questa esercitazione.
docker --version node --version npm --version az --version
Nota
Questa esercitazione richiede le versioni seguenti di ogni strumento preinstallato nell'ambiente:
Tool Versione Docker ≥ 20.10.0 Node.js ≥ 18.0150 NPM ≥ 9.5.0 Interfaccia della riga di comando di Azure ≥ 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.0
Nella barra laterale selezionare l'estensione MongoDB.
Aggiungere una nuova connessione all'estensione MongoDB usando la stringa di connessione
mongodb://localhost
.Al termine della connessione, aprire il file playground data/products.mongodb.
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 }, ... ]
Nota
Gli ID 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 Valore CONNECTION_STRING
Il stringa di connessione al cluster Azure Cosmos DB per MongoDB (vCore). Per il momento, usare mongodb://localhost:27017?directConnection=true
.CONNECTION_STRING=mongodb://localhost:27017?directConnection=true
Modificare il contesto del terminale impostandolo sulla cartella server/.
cd server
Installare le dipendenze da Node Package Manager (npm).
npm install
Avviare l'applicazione Node.js & Express.
npm start
L'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 Cosmos DB per MongoDB (vCore)
A questo punto, verificare che l'applicazione funzioni perfettamente con Azure Cosmos DB per MongoDB (vCore). 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 Cosmos DB per MongoDB (vCore) esistente.
Nella pagina del cluster Azure Cosmos DB per MongoDB (vCore) selezionare l'opzione di menu di spostamento Stringhe di connessione.
Registrare il valore del campo Stringa di connessione.
Importante
La stringa di connessione nel portale non include i valori nome utente e password. È necessario sostituire i segnaposto
<user>
e<password>
con le credenziali usate durante la creazione del cluster.Tornare all'interno dell'ambiente di sviluppo integrato (IDE), aprire un nuovo terminale.
Avviare la shell MongoDB usando il comando
mongosh
e la stringa di connessione registrata in precedenza. Assicurarsi di sostituire i segnaposto<user>
e<password>
con le credenziali usate durante la creazione del cluster.mongosh "<mongodb-cluster-connection-string>"
Nota
Potrebbe essere necessario codificare valori specifici per la stringa di connessione. In questo esempio il nome del cluster è
msdocs-cosmos-tutorial
, il nome utente èclusteradmin
e la password èP@ssw.rd
. Nella password il carattere@
dovrà 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-cosmos-tutorial.mongocluster.cosmos.azure.com/?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000
Nella 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 }, ... ]
Nota
Gli ID oggetto (
_id
) vengono generati in modo casuale e differiscono da questo output di esempio troncato.Uscire dalla shell MongoDB.
exit
Nella directory client/ creare un nuovo file con estensione env .
Nel file client/.env aggiungere una variabile di ambiente per questo valore:
Variabile di ambiente Valore CONNECTION_STRING
Il stringa di connessione al cluster Azure Cosmos DB per MongoDB (vCore). 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/, installando le dipendenze da Gestione pacchetti node (npm) e quindi avviando l'applicazione.
cd server npm install npm start
L'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
Distribuire il servizio e il client nel servizio app di Azure per dimostrare che l'applicazione funziona end-to-end. 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 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 è già stato fatto, accedere all'interfaccia della riga di comando di Azure usando il comando
az login --use-device-code
.Impostare il percorso server/ come directory di lavoro corrente.
cd server
Creare 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_STRING
conaz 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 show
e 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 e il comando
open-cli
da NuGet connpx
per aprire una finestra del browser usando l'URI per l'app Web server. Verificare che l'app server restituisca i dati della matrice JSON dal cluster MongoDB (vCore).npx open-cli "https://$serverUri/products" --yes
Suggerimento
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 ../client
Creare 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_ENDPOINT
conaz 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 show
e 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-cli
da NuGet connpx
per 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" --yes
Suggerimento
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 nella propria sottoscrizione, alla fine di un progetto è opportuno rimuovere le risorse che non sono più necessarie. Le risorse che rimangono in esecuzione hanno un costo. È 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 \ --yes
Verificare 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 offre la possibilità di aumentare le ore gratuite per core a cui si ha diritto per l'account.
Accedere al dashboard di GitHub Codespaces (https://github.com/codespaces).
Individuare i codespace attualmente in esecuzione provenienti dal repository GitHub
azure-samples/msdocs-azure-cosmos-db-mongodb-mern-web-app
.Aprire il menu di scelta rapida per il codespace e selezionare Elimina.
Passaggio successivo
Dopo aver creato la prima applicazione per il cluster MongoDB (vCore), vedere come eseguire la migrazione dei dati ad Azure Cosmos DB.