Azure DocumentDB ile Node.js konsol uygulaması oluşturma

Bu kılavuz, Azure DocumentDB kümesine bağlanmak için bir Node.js konsol uygulaması oluşturmanıza yardımcı olur. Geliştirme ortamınızı hazırlar, kimlik doğrulaması yapmak için JavaScript için Azure SDK'sından paketi kullanır @azure/identity ve veritabanındaki belgeler üzerinde ortak işlemler gerçekleştirirsiniz.

Prerequisites

  • Mevcut bir Azure DocumentDB kümesi

Konsol uygulamanızı yapılandırma

Ardından, yeni bir konsol uygulaması projesi oluşturun ve kümenizde kimlik doğrulaması yapmak için gerekli kitaplıkları içeri aktarın.

  1. Projeniz için yeni bir dizin oluşturun ve ile npm initbaşlatın.

    mkdir mongodb-app
    cd mongodb-app
    npm init -y
    
  2. Projenizde TypeScript'i ayarlayın.

    npm install typescript ts-node @types/node --save-dev
    npx tsc --init
    
  3. Uygulamanız için ana app.ts TypeScript dosyasını oluşturun.

    touch app.ts
    
  4. @azure/identity Kimlik doğrulaması için kitaplığı yükleyin.

    npm install @azure/identity
    
  5. mongodb Kitaplığı yükleyin.

    npm install mongodb
    

Kümeye bağlanma

Şimdi kitaplığını Azure.IdentityTokenCredential kullanarak kümenize bağlanmak için bir kullanın. Resmi MongoDB sürücüsünün, kümeye bağlanırken kullanılmak üzere Microsoft Entra'dan belirteçleri almak için uygulanması gereken özel bir arabirimi vardır.

  1. JavaScript dosyanızın üst kısmındaki gerekli modülleri içeri aktarın.

    import { MongoClient } from 'mongodb';
    import { DefaultAzureCredential } from '@azure/identity';
    
  2. TokenCredential örneğinden gerektiğinde belirteçleri almayı sağlayan bir belirteç geri çağırma işlevi oluşturun.

    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),
        };
    };
    
  3. Azure DocumentDB kümenize bağlanmak için küme adı değişkeninizi ayarlayın.

    const clusterName = '<azure-documentdb-cluster-name>';
    
  4. DefaultAzureCredential örneği oluşturun.

    const credential = new DefaultAzureCredential();
    
  5. OpenID Connect (OIDC) kimlik doğrulaması ile yapılandırılmış bir MongoDB istemcisi oluşturun.

    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');
    
  1. TypeScript dosyanızın en üstündeki gerekli modülleri içeri aktarın.

    import { AccessToken, DefaultAzureCredential, TokenCredential } from '@azure/identity';
    import { Collection, Db, Filter, FindCursor, MongoClient, OIDCCallbackParams, OIDCResponse, UpdateFilter, UpdateOptions, UpdateResult, WithId } from 'mongodb';
    
  2. TokenCredential örneğinden gerektiğinde belirteçleri almayı sağlayan bir belirteç geri çağırma işlevi oluşturun.

    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)
        };
    };
    
  3. Azure DocumentDB kümenize bağlanmak için küme adı değişkeninizi ayarlayın.

    const clusterName: string = '<azure-documentdb-cluster-name>';
    
  4. DefaultAzureCredential örneği oluşturun.

    const credential: TokenCredential = new DefaultAzureCredential();
    
  5. OpenID Connect (OIDC) kimlik doğrulaması ile yapılandırılmış bir MongoDB istemcisi oluşturun.

    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');
    

Yaygın işlemler gerçekleştirme

Son olarak veritabanları, koleksiyonlar ve belgelerle ortak görevleri gerçekleştirmek için resmi kitaplığı kullanın. Burada, koleksiyonlarınızı ve öğelerinizi yönetmek için MongoDB veya DocumentDB ile etkileşimde bulunurken kullandığınız sınıfları ve yöntemleri kullanırsınız.

  1. Adına göre veritabanınızın referansını alın.

    const databaseName = process.env.SETTINGS__DATABASENAME ?? 'cosmicworks';
    
    console.log('Database pointer created');
    
  2. Koleksiyonunuza bir referans alın.

    const collectionName = process.env.SETTINGS__COLLECTIONNAME ?? 'products';
    
    console.log('Collection pointer created');
    
  3. kullanarak collection.updateOne bir belge oluşturun ve koleksiyona ekleyin.

    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}`);
    }
    
  4. Koleksiyondan belirli bir belgeyi almak için kullanın collection.findOne .

    const filter = { _id: request.params.id };
    
    var document = await collection.findOne(filter, options);
    
    console.log(`Read document _id:\t${document._id}`);
    
  5. kullanarak collection.findbir filtreyle eşleşen birden çok belgeyi sorgulama.

    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)}`);
    }
    
  6. İşiniz bittiğinde MongoDB istemci bağlantısını kapatın.

    await client.close();
    
  1. Adına göre veritabanınızın referansını alın.

    const database: Db = client.db('<database-name>');
    
    console.log('Database pointer created');
    
  2. Koleksiyonunuza bir referans alın.

    const collection: Collection<Product> = database.collection<Product>('<collection-name>');
    
    console.log('Collection pointer created');
    
  3. Ürün belgelerinizi temsil eden bir arabirim tanımlayın.

    interface Product {
        _id: string;
        category: string;
        name: string;
        quantity: number;
        price: number;
        clearance: boolean;
    }
    
  4. kullanarak collection.updateOne bir belge oluşturun ve koleksiyona ekleyin.

    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}`);
    }
    
  5. Koleksiyondan belirli bir belgeyi almak için kullanın collection.findOne .

    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}`);
    
  6. kullanarak collection.findbir filtreyle eşleşen birden çok belgeyi sorgulama.

    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)}`);
    }
    
  7. İşiniz bittiğinde MongoDB istemci bağlantısını kapatın.

    await client.close();