Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce guide vous aide à créer une application console Node.js pour vous connecter à un cluster Azure DocumentDB. Vous préparez votre environnement de développement, utilisez le @azure/identity package du Kit de développement logiciel (SDK) Azure pour JavaScript pour l’authentification et effectuez des opérations courantes sur les documents de la base de données.
Prerequisites
Un abonnement Azure
- Si vous n’avez pas d’abonnement Azure, créez un compte gratuit
Un cluster Azure DocumentDB existant
- Si vous n’avez pas de cluster, créez un cluster
Utilisez l’environnement Bash dans Azure Cloud Shell. Pour obtenir plus d’informations, consultez Démarrage d’Azure Cloud Shell.
Si vous préférez exécuter des commandes de référence CLI localement, installez Azure CLI. Si vous exécutez sur Windows ou macOS, envisagez d’exécuter Azure CLI dans un conteneur Docker. Pour plus d’informations, consultez Comment exécuter Azure CLI dans un conteneur Docker.
Si vous utilisez une installation locale, connectez-vous à Azure CLI à l’aide de la commande az login. Pour terminer le processus d’authentification, suivez les étapes affichées dans votre terminal. Pour obtenir d’autres options de connexion, consultez S’authentifier auprès d’Azure à l’aide d’Azure CLI.
Lorsque vous y êtes invité, installez l’extension Azure CLI lors de la première utilisation. Pour plus d’informations sur les extensions, consultez Utiliser et gérer des extensions avec Azure CLI.
Exécutez az version pour rechercher la version et les bibliothèques dépendantes installées. Pour effectuer une mise à niveau vers la dernière version, exécutez az upgrade.
Authentification Microsoft Entra configurée pour le cluster avec votre identité bénéficiant d’un rôle
root.Dernière version de prise en charge à long terme (LTS) de Node
- Dernière version de TypeScript.
Configurer votre application console
Ensuite, créez un projet d’application console et importez les bibliothèques nécessaires pour vous authentifier auprès de votre cluster.
Créez un répertoire pour votre projet et initialisez-le avec
npm init.mkdir mongodb-app cd mongodb-app npm init -yConfigurez TypeScript dans votre projet.
npm install typescript ts-node @types/node --save-dev npx tsc --initCréez le fichier TypeScript principal app.ts pour votre application.
touch app.tsInstallez la bibliothèque pour l’authentification
@azure/identity.npm install @azure/identityInstallez la bibliothèque
mongodb.npm install mongodb
Se connecter au cluster
À présent, utilisez la bibliothèque Azure.Identity pour obtenir un TokenCredential à utiliser afin de vous connecter à votre cluster. Le pilote MongoDB officiel a une interface spéciale qui doit être implémentée pour obtenir des jetons de Microsoft Entra à utiliser lors de la connexion au cluster.
Importez les modules nécessaires en haut de votre fichier JavaScript.
import { MongoClient } from 'mongodb'; import { DefaultAzureCredential } from '@azure/identity';Créez une fonction de rappel de jeton qui obtient des jetons de l’instance
TokenCredentialsi nécessaire.const azureIdentityTokenCallback = async (_, credential) => { const tokenResponse = await credential.getToken(['https://ossrdbms-aad.database.windows.net/.default']); if (!tokenResponse || !tokenResponse.token) { throw new Error('Failed to retrieve a valid access token.'); } return { accessToken: tokenResponse.token, expiresInSeconds: Math.floor((tokenResponse.expiresOnTimestamp - Date.now()) / 1000), }; };Définissez votre variable de nom de cluster pour vous connecter à votre cluster Azure DocumentDB.
const clusterName = '<azure-documentdb-cluster-name>';Créez une instance de
DefaultAzureCredential.const credential = new DefaultAzureCredential();Créez un client MongoDB configuré avec l’authentification OpenID Connect (OIDC).
client = new MongoClient(`mongodb+srv://${clusterName}.global.mongocluster.cosmos.azure.com/`, { connectTimeoutMS: 120000, tls: true, retryWrites: true, authMechanism: 'MONGODB-OIDC', authMechanismProperties: { OIDC_CALLBACK: (params) => azureIdentityTokenCallback(params, credential), ALLOWED_HOSTS: ['*.azure.com'] } }); console.log('Client created');
Importez les modules nécessaires en haut de votre fichier TypeScript.
import { AccessToken, DefaultAzureCredential, TokenCredential } from '@azure/identity'; import { Collection, Db, Filter, FindCursor, MongoClient, OIDCCallbackParams, OIDCResponse, UpdateFilter, UpdateOptions, UpdateResult, WithId } from 'mongodb';Créez une fonction de rappel de jeton qui obtient des jetons de l’instance
TokenCredentialsi nécessaire.const AzureIdentityTokenCallback = async (params: OIDCCallbackParams, credential: TokenCredential): Promise<OIDCResponse> => { const tokenResponse: AccessToken | null = await credential.getToken(['https://ossrdbms-aad.database.windows.net/.default']); return { accessToken: tokenResponse?.token || '', expiresInSeconds: (tokenResponse?.expiresOnTimestamp || 0) - Math.floor(Date.now() / 1000) }; };Définissez votre variable de nom de cluster pour vous connecter à votre cluster Azure DocumentDB.
const clusterName: string = '<azure-documentdb-cluster-name>';Créez une instance de
DefaultAzureCredential.const credential: TokenCredential = new DefaultAzureCredential();Créez un client MongoDB configuré avec l’authentification OpenID Connect (OIDC).
const client = new MongoClient( `mongodb+srv://${clusterName}.global.mongocluster.cosmos.azure.com/`, { connectTimeoutMS: 120000, tls: true, retryWrites: true, authMechanism: 'MONGODB-OIDC', authMechanismProperties: { OIDC_CALLBACK: (params: OIDCCallbackParams) => AzureIdentityTokenCallback(params, credential), ALLOWED_HOSTS: ['*.azure.com'] } }); console.log('Client created');
Effectuer des opérations courantes
Enfin, utilisez la bibliothèque officielle pour effectuer des tâches courantes avec des bases de données, des collections et des documents. Ici, vous utilisez les mêmes classes et méthodes que celles que vous utiliseriez pour interagir avec MongoDB ou DocumentDB pour gérer vos collections et éléments.
Obtenez une référence à votre base de données par nom.
const databaseName = process.env.SETTINGS__DATABASENAME ?? 'cosmicworks'; console.log('Database pointer created');Obtenez une référence à votre collection.
const collectionName = process.env.SETTINGS__COLLECTIONNAME ?? 'products'; console.log('Collection pointer created');Créez un document en utilisant
collection.updateOneet upsert dans la collection.const filter = { _id: request.params._id }; const payload = { $set: document }; const options = { upsert: true }; var response = await collection.updateOne(filter, payload, options); if (response.acknowledged) { console.log(`Documents upserted count:\t${response.matchedCount}`); }Permet
collection.findOned’obtenir un document spécifique de la collection.const filter = { _id: request.params.id }; var document = await collection.findOne(filter, options); console.log(`Read document _id:\t${document._id}`);Rechercher plusieurs documents correspondant à un filtre en utilisant
collection.find.var filter = { category: 'gear-surf-surfboards' }; var documents = collection.find(filter); for await (const document of documents) { console.log(`Found document:\t${JSON.stringify(document)}`); }Fermez la connexion du client MongoDB lorsque vous avez terminé.
await client.close();
Obtenez une référence à votre base de données par nom.
const database: Db = client.db('<database-name>'); console.log('Database pointer created');Obtenez une référence à votre collection.
const collection: Collection<Product> = database.collection<Product>('<collection-name>'); console.log('Collection pointer created');Définissez une interface pour représenter vos documents de produit.
interface Product { _id: string; category: string; name: string; quantity: number; price: number; clearance: boolean; }Créez un document en utilisant
collection.updateOneet upsert dans la collection.var document: Product = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', category: 'gear-surf-surfboards', name: 'Yamba Surfboard', quantity: 12, price: 850.00, clearance: false }; var query: Filter<Product> = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' }; var payload: UpdateFilter<Product> = { $set: document }; var options: UpdateOptions = { upsert: true }; var response: UpdateResult<Product> = await collection.updateOne(query, payload, options); if (response.acknowledged) { console.log(`Documents upserted count:\t${response.matchedCount}`); }Permet
collection.findOned’obtenir un document spécifique de la collection.var query: Filter<Product> = { _id: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb', category: 'gear-surf-surfboards' }; var response: WithId<Product> | null = await collection.findOne(query); var read_item: Product = response as Product; console.log(`Read document _id:\t${read_item._id}`);Rechercher plusieurs documents correspondant à un filtre en utilisant
collection.find.var query: Filter<Product> = { category: 'gear-surf-surfboards' }; var response: FindCursor<WithId<Product>> = collection.find(query); for await (const document of response) { console.log(`Found document:\t${JSON.stringify(document)}`); }Fermez la connexion du client MongoDB lorsque vous avez terminé.
await client.close();