Краткое руководство. Использование 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 для таблицы и развертывания контейнерного примера приложения. Пример приложения использует клиентская библиотека для управления, создания, чтения и запроса примеров данных.
Откройте терминал в пустом каталоге.
Если вы еще не прошли проверку подлинности, выполните проверку подлинности в интерфейсе командной строки разработчика Azure с помощью
azd auth login
. Выполните действия, указанные средством для проверки подлинности в CLI с помощью предпочитаемых учетных данных Azure.azd auth login
Используется
azd init
для инициализации проекта.azd init --template cosmos-db-table-nodejs-quickstart
Во время инициализации настройте уникальное имя среды.
Разверните учетную запись Azure Cosmos DB с помощью
azd up
. Шаблоны Bicep также развертывают пример веб-приложения.azd up
В процессе подготовки выберите подписку, требуемое расположение и целевую группу ресурсов. Дождитесь завершения процесса подготовки. Процесс может занять около пяти минут.
После завершения подготовки ресурсов 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.
Используйте URL-адрес консоли для перехода к веб-приложению в браузере. Просмотрите выходные данные запущенного приложения.
Установка клиентской библиотеки
Клиентская библиотека доступна через npm в виде @azure/data-tables
пакета.
Откройте терминал и перейдите в папку
/src/ts
.cd ./src/ts
Если пакет еще не установлен, установите
@azure/data-tables
его с помощьюnpm install
.npm install --save @azure/data-tables
Откройте и просмотрите файл src/ts/package.json , чтобы убедиться, что запись
@azure/data-tables
существует.
Откройте терминал и перейдите в папку
/src/js
.cd ./src/js
Если пакет еще не установлен, установите
@azure/data-tables
его с помощьюnpm install
.npm install --save @azure/data-tables
Откройте и просмотрите файл 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