Een Angular-app maken met de API van Azure Cosmos DB voor MongoDB - Mongoose gebruiken om verbinding te maken met Azure Cosmos DB
VAN TOEPASSING OP: MongoDB
In deze meerdelige zelfstudie ziet u hoe u een Node.js-app maakt met Express en Angular, en hoe u deze verbindt met uw Azure Cosmos DB-account dat is geconfigureerd met de API van Azure Cosmos DB voor MongoDB. In dit artikel wordt deel 5 van de zelfstudie beschreven. Dit is een voortzetting van deel 4.
In dit deel van de zelfstudie komen deze onderwerpen aan bod:
- Mongoose gebruiken om verbinding te maken met Azure Cosmos DB.
- Haal uw Azure Cosmos DB-verbindingsreeks op.
- Het Hero-model maken
- De Hero-service maken voor het ophalen van Hero-gegevens
- Voer de app lokaal uit.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
Voer de stappen in deel 4 uit voordat u met deze zelfstudie begint.
Voor deze zelfstudie moet u de Azure CLI lokaal uitvoeren. Azure CLI versie 2.0 of hoger moet geïnstalleerd zijn. Voer
az --version
uit om de versie te bekijken. Als u de Azure CLI moet installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.In deze zelfstudie wordt u stapsgewijs begeleid bij het maken van de toepassing. Als u het voltooide project wilt downloaden, kunt u de voltooide app vinden in de angular-cosmosdb-opslagplaats op GitHub.
Mongoose gebruiken om verbinding te maken
Mongoose is een ODM-bibliotheek (Object Data Modeling) voor MongoDB en Node.js. U kunt Mongoose gebruiken om verbinding te maken met uw Azure Cosmos DB-account. Gebruik de volgende stappen om Mongoose te installeren en verbinding te maken met Azure Cosmos DB:
Installeer de module mongoose npm, een API die wordt gebruikt voor de communicatie met MongoDB.
npm install mongoose@5.13.15 --save
Belangrijk
Azure Cosmos DB voor MongoDB is compatibel met maximaal de versie
5.13.15
van Mongoose. Zie de discussie over het probleem in de Mongoose GitHub-opslagplaats voor meer informatie.Maak in de map server een bestand met de naam mongo.js. U gaat de verbindingsgegevens van uw Azure Cosmos DB-account toevoegen aan dit bestand.
Kopieer de volgende code naar het bestand mongo.js. De code biedt de volgende functionaliteit:
Vereist Mongoose.
Overschrijft de Mongo-promise om de basis-promise te gebruiken die is ingebouwd in ES6/ES2015 en latere versies.
Roept een ENV-bestand aan waarmee u bepaalde dingen kunt instellen op basis van de fase waarin u zich bevindt: fasering, productie of ontwikkeling. U maakt dit bestand in het volgende gedeelte.
Haalt de MongoDB-verbindingsreeks op, die is ingesteld in het ENV-bestand.
Maakt een verbindingsfunctie die Mongoose aanroept.
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 };
Maak in het deelvenster Explorer, onder server, een map met de naam environment. Maak in de map environment een bestand met de naam environment.js.
Uit het bestand mongo.js moeten we waarden overnemen voor de parameters
dbName
,key
encosmosPort
. Kopieer de volgende code naar het bestand 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 };
De verbindingsreeks ophalen
Om uw toepassing te verbinden met Azure Cosmos DB, moet u de configuratie-instellingen voor de toepassing bijwerken. Voer de volgende stappen uit om de instellingen bij te werken:
Ga naar de Azure-portal en zoek deze gegevens op voor uw Azure Cosmos DB-account: het poortnummer, de Azure Cosmos DB-accountnaam en de primaire sleutel.
Wijzig in het bestand environment.js de waarde van
port
in 10255.const port = 10255;
Wijzig in het bestand environment.js de waarde van
accountName
in de naam van het Azure Cosmos DB-account dat u in deel 4 van de reeks zelfstudies hebt gemaakt.Haal de primaire sleutel voor het Azure Cosmos DB-account op via de volgende CLI-opdracht in het terminalvenster:
az cosmosdb keys list --name <cosmosdb-name> -g myResourceGroup
<cosmosdb-name> is de naam van het Azure Cosmos DB-account dat u in deel 4 van de zelfstudie hebt gemaakt.
Kopieer de primaire sleutel naar het bestand environment.js als de waarde voor
key
.
De toepassing beschikt nu over alle gegevens om verbinding te maken met Azure Cosmos DB.
Een Hero-model maken
Vervolgens moet u het schema definiëren van de gegevens die moeten worden opgeslagen in Azure Cosmos DB. Dit doet u door een modelbestand te definiëren. Gebruik de volgende stappen om een Hero-model te maken waarmee het schema van de gegevens wordt gedefinieerd:
Maak in het deelvenster Explorer het bestand hero.model.js onder de map server.
Kopieer de volgende code naar het bestand hero.model.js. De code biedt de volgende functionaliteit:
- Vereist Mongoose.
- Maakt een nieuw schema met een id, een naam en een uitspraak.
- Maakt een model aan de hand van het schema.
- Exporteert het model.
- Geeft de verzameling de naam Heroes (in plaats van Heros, wat de standaardnaam van de verzameling is op basis van de regels voor namen in meervoud in 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;
Een Hero-service maken
Als u het Hero-model hebt gemaakt, moet u een service definiëren voor het lezen van de gegevens, en voor het uitvoeren van bewerkingen voor opvragen, verwijderen en bijwerken. Gebruik de volgende stappen om een Hero-service te maken die een query uitvoert op de gegevens vanuit Azure Cosmos DB:
Maak in het deelvenster Explorer het bestand hero.service.js onder de map server.
Kopieer de volgende code naar het bestand hero.service.js. De code biedt de volgende functionaliteit:
- Haalt het model op dat u hebt gemaakt.
- Maakt verbinding met de database.
- Maakt een variabele
docquery
die de methodehero.find
gebruikt voor het definiëren van een query waarmee alle hero's worden geretourneerd. - Voert een query uit met de functie
docquery.exec
met een promise om een lijst op te vragen met alle hero's waarvan de responsstatus 200 is. - Retourneert het foutbericht als de status 500 is.
- Haalt de hero's op omdat we modules gebruiken.
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 };
Routes configureren
Vervolgens moet u routes instellen voor het afhandelen van de URL's voor get-, create-, read- en delete-aanvragen. De routeringsmethoden bevatten callback-functies (ook wel handlerfuncties genoemd). Deze functies worden aangeroepen wanneer de toepassing een aanvraag voor het opgegeven eindpunt en de HTTP-methode ontvangt. Gebruik de volgende stappen om de Hero-service toe te voegen en uw routes te definiëren:
Open in Visual Studio Code het bestand routes.js en maak een commentaar van de functie
res.send
waarmee de hero-voorbeeldgegevens worden verzonden. Voeg in plaats daarvan een regel toe om de functieheroService.getHeroes
aan te roepen.router.get('/heroes', (req, res) => { heroService.getHeroes(req, res); // res.send(200, [ // {"id": 10, "name": "Starlord", "saying": "oh yeah"} // ]) });
require
de hero-service in het bestand routes.js:const heroService = require('./hero.service');
Werk in het bestand hero.service.js de functie
getHeroes
bij voor gebruik van de parametersreq
enres
(zie hieronder):function getHeroes(req, res) {
Laten we de bovenstaande code nog eens even bekijken. We hebben eerst het bestand index.js, waarmee de node-server wordt ingesteld. In het bestand worden uw routes ingesteld en gedefinieerd. Vervolgens communiceert het bestand routes.js met de hero-service. De service krijgt de opdracht functies op te halen, zoals getHeroes, en de aanvraag en respons door te geven. Het bestand hero.service.js haalt het model op en maakt verbinding met Mongo. Vervolgens wordt getHeroes uitgevoerd wanneer we deze functie aanroepen en wordt de respons 200 geretourneerd.
De app uitvoeren
Voer nu de app uit door de volgende stappen te volgen:
Sla alle wijzigingen op in Visual Studio Code. Selecteer aan de linkerkant de knop Foutopsporing en selecteer vervolgens de knop Foutopsporing starten.
Schakel nu over naar de browser. Open de ontwikkelhulpprogramma's en het tabblad Netwerk. Ga naar
http://localhost:3000
, en daar zie je onze applicatie.
Er zijn nog geen hero's opgeslagen in de app. In het volgende deel van deze reeks zelfstudies gaan we put-, push- en delete-functionaliteit toevoegen. Daarna kunnen we vanuit de gebruikersinterface hero's toevoegen, bijwerken en verwijderen met behulp van Mongoose-verbindingen met onze Azure Cosmos DB-database.
Resources opschonen
Wanneer u de resources niet meer nodig hebt, kunt u de resourcegroep, het Azure Cosmos DB-account en alle bijbehorende resources verwijderen. Gebruik de volgende stappen om de resourcegroep te verwijderen:
- Ga naar de resourcegroep waarin u het Azure Cosmos DB-account hebt gemaakt.
- Selecteer Resourcegroep verwijderen.
- Bevestig de naam van de resourcegroep die u wilt verwijderen en selecteer Verwijderen.
Volgende stappen
Ga verder met deel 6 van de reeks zelfstudies om de functies Post, Put en Delete toe te voegen aan de app:
Wilt u capaciteitsplanning uitvoeren voor een migratie naar Azure Cosmos DB? U kunt informatie over uw bestaande databasecluster gebruiken voor capaciteitsplanning.
- Als alles wat u weet het aantal vcores en servers in uw bestaande databasecluster is, leest u meer over het schatten van aanvraageenheden met behulp van vCores of vCPU's
- Als u typische aanvraagtarieven voor uw huidige databaseworkload kent, leest u meer over het schatten van aanvraageenheden met behulp van azure Cosmos DB-capaciteitsplanner