Поделиться через


Краткое руководство. Использование Azure Cosmos DB для таблицы с пакетом SDK Azure для Node.js

В этом кратком руководстве описано, как развернуть базовое приложение Azure Cosmos DB для таблицы с помощью пакета SDK Azure для Node.js. Azure Cosmos DB для таблицы — это хранилище данных без схемы, позволяющее приложениям хранить структурированные данные таблицы в облаке. Вы узнаете, как создавать таблицы, строки и выполнять основные задачи в ресурсе Azure Cosmos DB с помощью пакета SDK Azure для Node.js.

Справочная документация по API: пакет исходного кода | библиотеки | кода (npm) | Azure Developer CLI

Необходимые компоненты

  • Azure Developer CLI
  • Docker Desktop
  • Node.js 22 или более поздней версии

Если у вас нет учетной записи Azure, создайте бесплатную учетную запись, прежде чем начинать работу.

Инициализация проекта

Используйте интерфейс командной строки разработчика Azure (azd) для создания учетной записи Azure Cosmos DB для таблицы и развертывания контейнерного примера приложения. Пример приложения использует клиентская библиотека для управления, создания, чтения и запроса примеров данных.

  1. Откройте терминал в пустом каталоге.

  2. Если вы еще не прошли проверку подлинности, выполните проверку подлинности в интерфейсе командной строки разработчика Azure с помощью azd auth login. Выполните действия, указанные средством для проверки подлинности в CLI с помощью предпочитаемых учетных данных Azure.

    azd auth login
    
  3. Используется azd init для инициализации проекта.

    azd init --template cosmos-db-table-nodejs-quickstart
    
  4. Во время инициализации настройте уникальное имя среды.

  5. Разверните учетную запись Azure Cosmos DB с помощью azd up. Шаблоны Bicep также развертывают пример веб-приложения.

    azd up
    
  6. В процессе подготовки выберите подписку, требуемое расположение и целевую группу ресурсов. Дождитесь завершения процесса подготовки. Процесс может занять около пяти минут.

  7. После завершения подготовки ресурсов Azure в выходные данные будет включен URL-адрес работающего веб-приложения.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Используйте URL-адрес консоли для перехода к веб-приложению в браузере. Просмотрите выходные данные запущенного приложения.

Снимок экрана: работающее веб-приложение.

Снимок экрана: работающее веб-приложение.

Установка клиентской библиотеки

Клиентская библиотека доступна через npm в виде @azure/data-tables пакета.

  1. Откройте терминал и перейдите в папку /src/ts .

    cd ./src/ts
    
  2. Если пакет еще не установлен, установите @azure/data-tables его с помощью npm install.

    npm install --save @azure/data-tables
    
  3. Откройте и просмотрите файл src/ts/package.json , чтобы убедиться, что запись @azure/data-tables существует.

  1. Откройте терминал и перейдите в папку /src/js .

    cd ./src/js
    
  2. Если пакет еще не установлен, установите @azure/data-tables его с помощью npm install.

    npm install --save @azure/data-tables
    
  3. Откройте и просмотрите файл src/js/package.json , чтобы убедиться, что запись @azure/data-tables существует.

Объектная модель

Имя Описание
TableServiceClient Этот тип является основным типом клиента и используется для управления метаданными или базами данных на уровне учетной записи.
TableClient Этот тип представляет клиент для таблицы в учетной записи.

Примеры кода

Пример кода в шаблоне использует таблицу с именем cosmicworks-products. В cosmicworks-products таблице содержатся такие сведения, как имя, категория, количество, цена, уникальный идентификатор и флаг продажи для каждого продукта. Контейнер использует уникальный идентификатор в качестве ключа строки и категории в качестве ключа секции.

аутентификация клиента;

В этом примере создается новый экземпляр TableServiceClient типа.

let client: TableServiceClient = new TableServiceClient("<azure-cosmos-db-table-account-endpoint>", "<credential>");
const credential = new DefaultAzureCredential();

let client = new TableServiceClient("<azure-cosmos-db-table-account-endpoint>", credential);

Получение таблицы

В этом примере создается экземпляр TableClient типа с помощью GetTableClient функции TableServiceClient типа.

let table: TableClient = new TableClient("<azure-cosmos-db-table-account-endpoint>", "<azure-cosmos-db-table-name>", credential);
let table = new TableClient("<azure-cosmos-db-table-account-endpoint>", "<azure-cosmos-db-table-name>", credential);

Создание сущности

Самый простой способ создать сущность в таблице — наследовать новый интерфейс, TableEntity а затем создать новый объект этого типа.

export interface Product extends TableEntity {
    name: string;
    quantity: number;
    price: number;
    clearance: boolean;
}
const entity: Product = {
    rowKey: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
    partitionKey: 'gear-surf-surfboards',
    name: 'Yamba Surfboard',
    quantity: 12,
    price: 850.00,
    clearance: false
};

Самый простой способ создать новый элемент в таблице — создать объект JSON.

const entity = {
    rowKey: 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb',
    partitionKey: 'gear-surf-surfboards',
    name: 'Yamba Surfboard',
    quantity: 12,
    price: 850.00,
    clearance: false
};

Создайте сущность в таблице с помощью upsertEntity метода из экземпляра TableService .

await table.upsertEntity<Product>(entity, "Replace"); 
await table.upsertEntity(entity, "Replace");

Получение сущности

Вы можете получить определенную сущность из таблицы с помощью getEntity метода, ключа строки для сущности и ключа секции сущности.

const response: GetTableEntityResponse<TableEntityResult<Product>> = await table.getEntity<Product>(partitionKey, rowKey);

const entity: Product = response as Product;
const entity = await table.getEntity(partitionKey, rowKey);

Запросы к сущностям

После вставки сущности можно также запустить запрос, чтобы получить все сущности, соответствующие определенному фильтру, с помощью listEntities фильтра OData.

const partitionKey: string = 'gear-surf-surfboards';

const filter: string = `PartitionKey eq '${partitionKey}'`

const queryOptions: TableEntityQueryOptions = { filter: filter }

const entities: PagedAsyncIterableIterator<TableEntityResult<Product>, TableEntityResultPage<Product>> = table.listEntities<Product>({ queryOptions: queryOptions });
const partitionKey = 'gear-surf-surfboards';

const entities = table.listEntities({
    queryOptions: {
        filter: `PartitionKey eq '${partitionKey}'`
    }
});

Анализ результатов запроса с разбивкой на страницы с помощью асинхронного for await цикла в наборе entitiesс разбивкой на страницы.

for await(const entity of entities) {
    // Do something
}
for await(const entity of entities) {
    // Do something
}

Очистка ресурсов

Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.

azd down