Exercício – Criar um aplicativo Node.js no Visual Studio Code
Nesta unidade, use o Visual Studio Code para criar e executar um aplicativo Node.js na área restrita do Azure que contém seus recursos.
- Instale os pacotes NPM que permitem trabalhar programaticamente com seu banco de dados Cosmos DB Core (SQL).
- Escreva códigos JavaScript que carreguem o conjunto de dados de produtos da Contoso em um contêiner.
Observação
Este exercício pressupõe que você já tenha instalado o Node.js e o NPM em seu computador desktop, iniciado a área restrita do Learn e se conectado a ela no Visual Studio Code.
Criar o projeto do Node.js
Use um terminal em um local de pasta no qual deseja colocar o aplicativo Node.js. Digite o comando a seguir para abrir o Visual Studio Code no local.
code .
No menu Terminal, selecione Novo terminal ou use o atalho do teclado Ctrl + Shift + `.
Na janela Terminal, execute o comando a seguir a fim de criar uma pasta chamada contoso-retail com relação ao aplicativo Node e mude para ela.
mkdir contoso-retail && cd contoso-retail
Digite os comandos a seguir para mover e inicializar um novo aplicativo Node.
npm init -y
O comando npm init cria um arquivo package.json e exibe o conteúdo dele. Esse arquivo contém os metadados iniciais para o aplicativo, contendo um nome padrão, uma descrição e um ponto de entrada.
No menu Arquivo do Visual Studio Code, selecione Abrir pasta e abra a pasta contoso-retail.
Na janela Explorer, selecione o arquivo package.json.
No painel do editor, altere o seguinte para o arquivo package.json:
Propriedade Valor tipo module
: o código JavaScript do módulo usa a sintaxe ES6O arquivo deverá ser semelhante ao mostrado abaixo. O código de exemplo usa a sintaxe ES6, portanto, é necessário definir o tipo do aplicativo como módulo.
{ "name": "contoso-retail", "version": "1.0.0", "description": "Student and course grades maintenance", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "MIT" }
No menu Arquivo, selecione Salvar.
Configurar o Visual Studio Code para salvar automaticamente as alterações de arquivo
- Ative o salvamento automático usando Arquivo > Preferências > Configurações, Ctrl + ,.
- Pesquise salvamento automático de arquivos.
- Selecione o afterDelay de 1000.
Criar o arquivo .gitignore
O arquivo .gitignore impede que você faça check-in de arquivos que não devem ser adicionados no controle de origem.
Crie um arquivo (Ctrl + N) chamado .gitignore
e inclua nele os itens a seguir.
node_modules
.env
Criar arquivo de ambiente de segredos
No Visual Studio Code, no menu Arquivo, selecione Novo arquivo de texto.
No menu Arquivo, clique em Salvar Como. Salve o novo arquivo com o nome
.env
.Adicione as seguintes variáveis ao arquivo:
COSMOS_CONNECTION_STRING= COSMOS_DATABASE_NAME=ContosoRetail COSMOS_CONTAINER_NAME=Products COSMOS_CONTAINER_PARTITION_KEY=categoryName
No explorador do Azure (Shift + Alt + A), selecione a assinatura e o nó do Azure Cosmos DB para ver os recursos.
Clique com o botão direito do mouse na conta do Cosmos DB e selecione Copiar cadeia de conexão.
Cole a cadeia de conexão no arquivo
.env
da variável COSMOS_CONNECTION_STRING.
Instalar o pacote do Cosmos DB
No terminal integrado, adicione o SDK do Cosmos DB.
npm install @azure/cosmos
No terminal integrado, adicione o pacote NPM a fim de usar o arquivo
.env
para variáveis de ambiente. Ele lê o arquivo.env
e adiciona esses valores ao objeto de runtimeprocess.env
.npm install dotenv
Forma do produto
Entender o JSON do documento ajudará você a entender as operações e suas respectivas entradas e respostas.
Os produtos neste conjunto de dados têm a seguinte forma:
{
"id": "FEEFEE3B-6CB9-4A75-B896-5182531F661B",
"categoryId": "AE48F0AA-4F65-4734-A4CF-D48B8F82267F",
"categoryName": "Bikes, Road Bikes",
"sku": "BK-R19B-52",
"name": "Road-750 Black, 52",
"description": "The product called \"Road-750 Black, 52\"",
"price": 539.99,
"tags": [
{ "id": "461ADE06-0903-4BAF-97AB-CC713E5B1DD4", "name": "Tag-174" },
...
],
"inventory": [
{ "location": "Dallas", "inventory": 91 },
...
]
}
Propriedade | Descrição |
---|---|
id | O Cosmos DB usa o identificador personalizado id para identificar exclusivamente cada item. A ID pode ser qualquer tipo de dados, como número, cadeia de caracteres etc. Se você não fornecê-la, o Cosmos DB criará uma para você. |
categoryName | Esta propriedade foi selecionada especificamente para este conjunto de dados como a chave de partição. O nome da categoria do produto fornece uma distribuição relativamente uniforme dos dados, o que é ideal para a chave de partição. O categoryName também não será alterado com muita frequência, o que é importante para uma chave de partição. |
Marcas e inventário | Representam subpropriedades que podem ser usadas para localizar e remodelar os resultados de consultas usando a palavra-chave JOIN. |
Criar o script para adicionar produtos a um contêiner
No Visual Studio Code, no menu Arquivo, selecione Novo arquivo de texto.
No menu Arquivo, clique em Salvar Como. Salve o novo arquivo com o nome 1-contoso-products-upload-data.js.
Copie o seguinte JavaScript e cole-o no arquivo.
import * as path from "path"; import { promises as fs } from "fs"; import { fileURLToPath } from "url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); // Get environment variables from .env import * as dotenv from "dotenv"; dotenv.config(); // Get Cosmos Client import { CosmosClient } from "@azure/cosmos"; // Provide required connection from environment variables const cosmosSecret = process.env.COSMOS_CONNECTION_STRING; // Authenticate to Azure Cosmos DB const cosmosClient = new CosmosClient(cosmosSecret); // Set Database name and container name const databaseName = process.env.COSMOS_DATABASE_NAME; const containerName = process.env.COSMOS_CONTAINER_NAME; const partitionKeyPath = [`/${process.env.COSMOS_CONTAINER_PARTITION_KEY}`]; // Create DB if it doesn't exist const { database } = await cosmosClient.databases.createIfNotExists({ id: databaseName, }); // Create container if it doesn't exist const { container } = await database.containers.createIfNotExists({ id: containerName, partitionKey: { paths: partitionKeyPath, }, }); // Get product data const fileAndPathToJson = "products.json"; const items = JSON.parse(await fs.readFile(path.join(__dirname, fileAndPathToJson), "utf-8")); let i = 0; // Insert products into container for (const item of items) { const { resource, activityId, statusCode } = await container.items.create(item); console.log(`[${i++}] activityId: ${activityId}, statusCode: ${statusCode}, ${resource.name} inserted`); } // Show container name - copy/paste into .env console.log(`\n\ncontainerName: ${containerName}`);// // Run script with // node 1-contoso-products-upload-data.js
Crie um arquivo chamado products.json e copie o conteúdo do arquivo de dados de exemplo products.json nele.
Esta é uma matriz de objetos JSON.
No terminal do Visual Studio Code, execute o arquivo JavaScript para carregar os dados no contêiner do Cosmos DB:
node 1-contoso-products-upload-data.js
O terminal exibe a contagem de itens, a activityId, o statusCode e o nome do item.
O objeto de resultado da operação
O objeto de resultado retornado por uma operação está documentado na documentação de referência SQL do Cosmos DB. Embora os resultados possam ter informações específicas da operação, cada um deles terá algumas propriedades que sempre são retornadas e são úteis para determinar o que aconteceu.
Propriedade do resultado | Descrição |
---|---|
activityId | A ID de evento exclusiva associada à operação específica. Se sua operação falhar e for necessário entrar em contato com o suporte, essa ID, além do nome do recurso e da assinatura, será útil para localizar rapidamente o problema. |
statusCode | O código de status HTTP que indica o sucesso ou a falha da operação. |
recurso | Será um objeto JSON do objeto final, como um documento JSON em um contêiner. |
Exibir documentos do Cosmos DB no Visual Studio Code
No Visual Studio Code, abra o explorador do Azure ou use o atalho de teclado Shift + Alt + A.
Localize e expanda o nó de Assinatura do Concierge e, em seguida, o nó de recursos do Azure Cosmos DB.
Encontre e expanda o banco de dados ContosoRetail e o respectivo contêiner Produtos.
Expanda o nó Documentos para ver os produtos que o script Node.js adicionou. O nome do nó para cada documento será a propriedade nome.
Selecione o primeiro produto para ver todo o JSON.
Verificar seu trabalho
- No Visual Studio Code, na extensão de Bancos de Dados do Azure, você vê a conta, o banco de dados e o contêiner do Cosmos DB.
- Ao expandir o contêiner, você vê muitos itens no nó Documentos.