Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia ajuda você a criar um aplicativo de console Node.js para se conectar a um cluster do Azure DocumentDB. Você prepara seu ambiente de desenvolvimento, usa o @azure/identity pacote do SDK do Azure para JavaScript para autenticação e executa operações comuns em documentos no banco de dados.
Pré-requisitos
Uma assinatura do Azure
- Se você não tiver uma assinatura do Azure, crie uma conta gratuita
Um cluster existente do Azure DocumentDB
- Se você não tiver um cluster, crie um novo cluster
Utilize o ambiente Bash no Azure Cloud Shell. Para obter mais informações, confira Introdução ao Azure Cloud Shell.
Se você preferir executar comandos de referência da CLI localmente, instale a CLI do Azure. Se você estiver executando no Windows ou no macOS, considere executar a CLI do Azure em um contêiner do Docker. Para obter mais informações, confira Como executar a CLI do Azure em um contêiner do Docker.
Se você estiver usando uma instalação local, entre na CLI do Azure usando o comando az login . Para concluir o processo de autenticação, siga as etapas exibidas em seu terminal. Para obter outras opções de entrada, consulte Autenticar no Azure usando a CLI do Azure.
Quando solicitado, instale a extensão da CLI do Azure no primeiro uso. Para obter mais informações sobre extensões, confira Usar e gerenciar extensões com a CLI do Azure.
Execute o comando az version para localizar a versão e as bibliotecas dependentes que estão instaladas. Para atualizar para a versão mais recente, execute az upgrade.
Autenticação do Microsoft Entra configurada para o cluster com sua identidade concedida à função
root.- Para habilitar a autenticação do Microsoft Entra, examine o guia de configuração.
Versão de LTS (suporte de longo prazo) mais recente do Node
- Versão mais recente do TypeScript.
Configurar seu aplicativo de console
Em seguida, crie um novo projeto de aplicativo de console e importe as bibliotecas necessárias para autenticar no cluster.
Crie um novo diretório para seu projeto e inicialize-o com
npm init.mkdir mongodb-app cd mongodb-app npm init -yConfigure o TypeScript em seu projeto.
npm install typescript ts-node @types/node --save-dev npx tsc --initCrie o arquivo TypeScript app.ts principal para seu aplicativo.
touch app.tsInstale a
@azure/identitybiblioteca para autenticação.npm install @azure/identityInstale a biblioteca
mongodb.npm install mongodb
Conectar-se ao cluster
Agora, use a biblioteca Azure.Identity para obter uma TokenCredential a ser usada para conectar-se ao cluster. O driver oficial do MongoDB tem uma interface especial que deve ser implementada para obter tokens do Microsoft Entra para uso ao se conectar ao cluster.
Importe os módulos necessários na parte superior do arquivo JavaScript.
import { MongoClient } from 'mongodb'; import { DefaultAzureCredential } from '@azure/identity';Crie uma função de retorno de chamada de token que obtém tokens da instância
TokenCredentialquando necessário.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), }; };Defina a variável de nome do cluster para se conectar ao cluster do Azure DocumentDB.
const clusterName = '<azure-documentdb-cluster-name>';Criar uma instância de
DefaultAzureCredential.const credential = new DefaultAzureCredential();Crie um cliente do MongoDB configurado com a autenticação OIDC (OpenID Connect).
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');
Importe os módulos necessários na parte superior do arquivo TypeScript.
import { AccessToken, DefaultAzureCredential, TokenCredential } from '@azure/identity'; import { Collection, Db, Filter, FindCursor, MongoClient, OIDCCallbackParams, OIDCResponse, UpdateFilter, UpdateOptions, UpdateResult, WithId } from 'mongodb';Crie uma função de retorno de chamada de token que obtém tokens da instância
TokenCredentialquando necessário.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) }; };Defina a variável de nome do cluster para se conectar ao cluster do Azure DocumentDB.
const clusterName: string = '<azure-documentdb-cluster-name>';Criar uma instância de
DefaultAzureCredential.const credential: TokenCredential = new DefaultAzureCredential();Crie um cliente do MongoDB configurado com a autenticação OIDC (OpenID Connect).
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');
Executar operações comuns
Por fim, use a biblioteca oficial para executar tarefas comuns com bancos de dados, coleções e documentos. Aqui, você usa as mesmas classes e métodos que usaria para interagir com MongoDB ou DocumentDB para gerenciar suas coleções e itens.
Obtenha uma referência ao banco de dados pelo nome.
const databaseName = process.env.SETTINGS__DATABASENAME ?? 'cosmicworks'; console.log('Database pointer created');Obtenha uma referência à sua coleção.
const collectionName = process.env.SETTINGS__COLLECTIONNAME ?? 'products'; console.log('Collection pointer created');Crie um documento usando
collection.updateOnee insira-o na coleção.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}`); }Use
collection.findOnepara obter um documento específico da coleção.const filter = { _id: request.params.id }; var document = await collection.findOne(filter, options); console.log(`Read document _id:\t${document._id}`);Consultar vários documentos correspondentes a um filtro usando
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)}`); }Feche a conexão de cliente do MongoDB quando terminar.
await client.close();
Obtenha uma referência ao banco de dados pelo nome.
const database: Db = client.db('<database-name>'); console.log('Database pointer created');Obtenha uma referência à sua coleção.
const collection: Collection<Product> = database.collection<Product>('<collection-name>'); console.log('Collection pointer created');Defina uma interface para representar os documentos do produto.
interface Product { _id: string; category: string; name: string; quantity: number; price: number; clearance: boolean; }Crie um documento usando
collection.updateOnee insira-o na coleção.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}`); }Use
collection.findOnepara obter um documento específico da coleção.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}`);Consultar vários documentos correspondentes a um filtro usando
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)}`); }Feche a conexão de cliente do MongoDB quando terminar.
await client.close();