Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przewodnik ułatwia tworzenie aplikacji konsolowej Node.js w celu nawiązania połączenia z klastrem usługi Azure DocumentDB. Przygotuj swoje środowisko programistyczne, używając pakietu @azure/identity z zestawu Azure SDK dla języka JavaScript do uwierzytelniania, i wykonuj typowe operacje na dokumentach w bazie danych.
Wymagania wstępne
Subskrypcja platformy Azure
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto
Istniejący klaster usługi Azure DocumentDB
- Jeśli nie masz klastra, utwórz nowy klaster
Użyj środowiska Bash w Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Get started with Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj Azure CLI. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie Azure CLI w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić Azure CLI w kontenerze Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do Azure CLI za pomocą polecenia az login. Aby zakończyć proces uwierzytelniania, wykonaj kroki wyświetlane na Twoim terminalu. Aby uzyskać inne opcje logowania, zobacz Uwierzytelnianie na platformie Azure przy użyciu interfejsu wiersza polecenia platformy Azure.
Gdy zostaniesz o to poproszony/a, zainstaluj rozszerzenie Azure CLI przy pierwszym użyciu. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
Uruchom az version, aby sprawdzić zainstalowaną wersję i biblioteki zależne. Aby zaktualizować do najnowszej wersji, uruchom az upgrade.
Uwierzytelnianie Microsoft Entra zostało skonfigurowane dla klastra z przypisaną rolą dla Twojej tożsamości
root.- Aby włączyć uwierzytelnianie firmy Microsoft Entra, zapoznaj się z przewodnikiem konfiguracji.
Najnowsza wersja długoterminowego wsparcia (LTS) Node
- Najnowsza wersja języka TypeScript.
Konfigurowanie aplikacji konsolowej
Następnie utwórz nowy projekt aplikacji konsolowej i zaimportuj niezbędne biblioteki do uwierzytelniania w klastrze.
Utwórz nowy katalog dla projektu i zainicjuj go za pomocą polecenia
npm init.mkdir mongodb-app cd mongodb-app npm init -ySkonfiguruj język TypeScript w projekcie.
npm install typescript ts-node @types/node --save-dev npx tsc --initUtwórz główny plik app.ts TypeScript dla aplikacji.
touch app.tsZainstaluj bibliotekę
@azure/identitydo uwierzytelniania.npm install @azure/identityZainstaluj bibliotekę
mongodb.npm install mongodb
Połącz się z klastrem
Teraz użyj biblioteki Azure.Identity, aby uzyskać TokenCredential, którego możesz użyć do połączenia się z klastrem. Oficjalny sterownik bazy danych MongoDB ma specjalny interfejs, który należy zaimplementować w celu uzyskania tokenów z firmy Microsoft Entra do użycia podczas nawiązywania połączenia z klastrem.
Zaimportuj niezbędne moduły w górnej części pliku JavaScript.
import { MongoClient } from 'mongodb'; import { DefaultAzureCredential } from '@azure/identity';Utwórz funkcję zwrotną do obsługi tokenów, która uzyskuje tokeny z instancji
TokenCredentialw razie potrzeby.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), }; };Ustaw zmienną nazwy klastra, aby nawiązać połączenie z klastrem usługi Azure DocumentDB.
const clusterName = '<azure-documentdb-cluster-name>';Utwórz wystąpienie elementu
DefaultAzureCredential.const credential = new DefaultAzureCredential();Utwórz klienta bazy danych MongoDB skonfigurowanego przy użyciu uwierzytelniania 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');
Zaimportuj niezbędne moduły w górnej części pliku TypeScript.
import { AccessToken, DefaultAzureCredential, TokenCredential } from '@azure/identity'; import { Collection, Db, Filter, FindCursor, MongoClient, OIDCCallbackParams, OIDCResponse, UpdateFilter, UpdateOptions, UpdateResult, WithId } from 'mongodb';Utwórz funkcję zwrotną do obsługi tokenów, która uzyskuje tokeny z instancji
TokenCredentialw razie potrzeby.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) }; };Ustaw zmienną nazwy klastra, aby nawiązać połączenie z klastrem usługi Azure DocumentDB.
const clusterName: string = '<azure-documentdb-cluster-name>';Utwórz wystąpienie elementu
DefaultAzureCredential.const credential: TokenCredential = new DefaultAzureCredential();Utwórz klienta bazy danych MongoDB skonfigurowanego przy użyciu uwierzytelniania 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');
Wykonywanie typowych operacji
Na koniec użyj oficjalnej biblioteki do wykonywania typowych zadań z bazami danych, kolekcjami i dokumentami. W tym miejscu użyjesz tych samych klas i metod, których należy użyć do interakcji z bazą danych MongoDB lub DocumentDB w celu zarządzania kolekcjami i elementami.
Uzyskaj odwołanie do bazy danych według nazwy.
const databaseName = process.env.SETTINGS__DATABASENAME ?? 'cosmicworks'; console.log('Database pointer created');Uzyskaj referencję do swojej kolekcji.
const collectionName = process.env.SETTINGS__COLLECTIONNAME ?? 'products'; console.log('Collection pointer created');Utwórz dokument przy użyciu
collection.updateOnemetody i dodaj go do kolekcji.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}`); }Użyj polecenia
collection.findOne, aby uzyskać określony dokument z kolekcji.const filter = { _id: request.params.id }; var document = await collection.findOne(filter, options); console.log(`Read document _id:\t${document._id}`);Wykonaj zapytanie o wiele dokumentów pasujących do filtru przy użyciu polecenia
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)}`); }Po zakończeniu zamknij połączenie klienta bazy danych MongoDB.
await client.close();
Uzyskaj odwołanie do bazy danych według nazwy.
const database: Db = client.db('<database-name>'); console.log('Database pointer created');Uzyskaj referencję do swojej kolekcji.
const collection: Collection<Product> = database.collection<Product>('<collection-name>'); console.log('Collection pointer created');Zdefiniuj interfejs reprezentujący dokumenty produktu.
interface Product { _id: string; category: string; name: string; quantity: number; price: number; clearance: boolean; }Utwórz dokument przy użyciu
collection.updateOnemetody i dodaj go do kolekcji.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}`); }Użyj polecenia
collection.findOne, aby uzyskać określony dokument z kolekcji.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}`);Wykonaj zapytanie o wiele dokumentów pasujących do filtru przy użyciu polecenia
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)}`); }Po zakończeniu zamknij połączenie klienta bazy danych MongoDB.
await client.close();