Criar uma aplicação Angular com a API do Azure Cosmos DB para MongoDB – Utilizar o Mongoose para ligar ao Azure Cosmos DB
APLICA-SE A: MongoDB
Este tutorial em várias partes demonstra como criar uma aplicação Node.js com Express e Angular e ligá-la à sua conta do Azure Cosmos DB configurada com a API do Azure Cosmos DB para MongoDB. Este artigo descreve a Parte 5 do tutorial e baseia-se na Parte 4.
Nesta parte do tutorial, irá:
- Utilize o Mongoose para ligar ao Azure Cosmos DB.
- Obtenha a cadeia de ligação do Azure Cosmos DB.
- Crie o modelo Hero.
- Crie o serviço Hero para obter dados do Hero.
- Execute a aplicação localmente.
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Pré-requisitos
Antes de iniciar este tutorial, conclua os passos na Parte 4.
Este tutorial requer que execute a CLI do Azure localmente. Tem de ter instalada a versão 2.0 ou posterior da CLI do Azure. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar a CLI do Azure, veja Instalar a CLI 2.0 do Azure.Este tutorial explica-lhe os passos para criar a aplicação passo a passo. Se quiser transferir o projeto concluído, pode obter a aplicação terminada a partir do repositório angular-cosmosdb no GitHub.
Utilizar o Mongoose para ligar
O Mongoose é uma biblioteca de modelação de dados de objetos (ODM) para MongoDB e Node.js. Pode utilizar o Mongoose para ligar à sua conta do Azure Cosmos DB. Utilize os seguintes passos para instalar o Mongoose e ligar ao Azure Cosmos DB:
Instale o módulo npm do mongoose, que é uma API utilizada para falar com o MongoDB.
npm install mongoose@5.13.15 --save
Importante
O Azure Cosmos DB para MongoDB é compatível com até à versão
5.13.15
do Mongoose. Para obter mais informações, veja o debate do problema no repositório do GitHub do Mongoose.Na pasta do servidor , crie um ficheiro com o nomemongo.js. Irá adicionar os detalhes de ligação da sua conta do Azure Cosmos DB a este ficheiro.
Copie o seguinte código para o ficheiro mongo.js . O código fornece a seguinte funcionalidade:
Requer o Mongoose.
Substitui a promessa do Mongo de utilizar a promessa básica incorporada no ES6/ES2015 e versões posteriores.
Chama um ficheiro env que lhe permite configurar determinados itens com base no facto de estar em teste, produção ou desenvolvimento. Irá criar esse ficheiro na secção seguinte.
Inclui a cadeia de ligação do MongoDB, que está definida no ficheiro env.
Cria uma função connect que chama o Mongoose.
const mongoose = require('mongoose'); /** * Set to Node.js native promises * Per https://mongoosejs.com/docs/promises.html */ mongoose.Promise = global.Promise; const env = require('./env/environment'); // eslint-disable-next-line max-len const mongoUri = `mongodb://${env.accountName}:${env.key}@${env.accountName}.documents.azure.com:${env.port}/${env.databaseName}?ssl=true`; function connect() { mongoose.set('debug', true); return mongoose.connect(mongoUri, { useMongoClient: true }); } module.exports = { connect, mongoose };
No painel Explorador, em servidor, crie uma pasta com o nome ambiente. Na pasta de ambiente , crie um ficheiro com o nomeenvironment.js.
No ficheiro mongo.js, temos de incluir valores para os
dbName
parâmetros , ,key
ecosmosPort
. Copie o seguinte código para o ficheiro deenvironment.js :// TODO: replace if yours are different module.exports = { accountName: 'your-cosmosdb-account-name-goes-here', databaseName: 'admin', key: 'your-key-goes-here', port: 10255 };
Obter a cadeia de ligação
Para ligar a sua aplicação ao Azure Cosmos DB, tem de atualizar as definições de configuração da aplicação. Utilize os seguintes passos para atualizar as definições:
Na portal do Azure, obtenha o número da porta, o nome da conta do Azure Cosmos DB e os valores da chave primária para a sua conta do Azure Cosmos DB.
No ficheiro environment.js , altere o valor de
port
para 10255.const port = 10255;
No ficheiro environment.js , altere o valor de
accountName
para o nome da conta do Azure Cosmos DB que criou na Parte 4 do tutorial.Obtenha a chave primária da conta do Azure Cosmos DB ao introduzir o comando da CLI seguinte na janela do terminal:
az cosmosdb list-keys --name <cosmosdb-name> -g myResourceGroup
<cosmosdb-name> é o nome da conta do Azure Cosmos DB que criou na Parte 4 do tutorial.
Copie a chave primária para o ficheiro environment.js como o
key
valor.
Agora, a sua aplicação tem todas as informações necessárias para ligar ao Azure Cosmos DB.
Criar um modelo de hero
Em seguida, tem de definir o esquema dos dados a armazenar no Azure Cosmos DB ao definir um ficheiro de modelo. Utilize os seguintes passos para criar um modelo Hero que defina o esquema dos dados:
No painel Explorador, na pasta servidor , crie um ficheiro com o nome hero.model.js.
Copie o seguinte código para o ficheiro hero.model.js . O código fornece a seguinte funcionalidade:
- Requer o Mongoose.
- Cria um esquema novo com ID, nome e mensagem.
- Cria um modelo com o esquema.
- Exporta o modelo.
- Dá o nome Heroes à coleção (em vez de Heros, que é o nome predefinido da coleção com base nas regras de nomenclatura plural do Mongoose).
const mongoose = require('mongoose'); const Schema = mongoose.Schema; const heroSchema = new Schema( { id: { type: Number, required: true, unique: true }, name: String, saying: String }, { collection: 'Heroes' } ); const Hero = mongoose.model('Hero', heroSchema); module.exports = Hero;
Criar um modelo de hero
Depois de criar o modelo hero, tem de definir um serviço para ler os dados e efetuar operações de lista, criação, eliminação e atualização. Utilize os seguintes passos para criar um serviço Hero que consulta os dados do Azure Cosmos DB:
No painel Explorador, na pasta servidor , crie um ficheiro com o nome hero.service.js.
Copie o seguinte código para o ficheiro hero.service.js . O código fornece a seguinte funcionalidade:
- Obtém o modelo que criou.
- Liga à base de dados.
- Cria uma
docquery
variável que utiliza ohero.find
método para definir uma consulta que devolve todos os heroes. - Executa uma consulta com a função com a
docquery.exec
promessa de obter uma lista de todos os heroes, em que o estado da resposta é 200. - Devolve a mensagem de erro se o estado for 500.
- Obtém os heroes porque estamos a utilizar módulos.
const Hero = require('./hero.model'); require('./mongo').connect(); function getHeroes() { const docquery = Hero.find({}); docquery .exec() .then(heroes => { res.status(200).json(heroes); }) .catch(error => { res.status(500).send(error); return; }); } module.exports = { getHeroes };
Configurar rotas
Em seguida, tem de configurar rotas para processar os URLs para obter, criar, ler e eliminar pedidos. Os métodos de encaminhamento especificam funções de chamada de retorno (também denominadas funções de processador). Estas funções são chamadas quando a aplicação recebe um pedido para o ponto final especificado e o método HTTP. Utilize os seguintes passos para adicionar o serviço Hero e definir as rotas:
No Visual Studio Code, no ficheiro routes.js , comente a
res.send
função que envia os dados de exemplo hero. Em alternativa, adicione uma linha para chamar aheroService.getHeroes
função.router.get('/heroes', (req, res) => { heroService.getHeroes(req, res); // res.send(200, [ // {"id": 10, "name": "Starlord", "saying": "oh yeah"} // ]) });
No ficheiro routes.js ,
require
o serviço hero:const heroService = require('./hero.service');
No ficheiro hero.service.js, atualize a
getHeroes
função para utilizar os parâmetros eres
dareq
seguinte forma:function getHeroes(req, res) {
Vamos dar um minuto para rever e percorrer o código anterior. Primeiro, entramos no ficheiro index.js, que configura o servidor de nós. Repare que configura e define as rotas. Em seguida, o seu ficheiro de routes.js comunica com o serviço hero e diz-lhe para obter as suas funções, como getHeroes, e transmitir o pedido e a resposta. O ficheiro hero.service.js obtém o modelo e liga-se ao Mongo. Em seguida, executa getHeroes quando lhe chamamos e devolve uma resposta de 200.
Executar a aplicação
Em seguida, execute a aplicação com os seguintes passos:
No Visual Studio Code, guarde todas as alterações. À esquerda, selecione o botão Depurar e, em seguida, selecione o botão Iniciar Depuração .
Agora, mude para o browser. Abra o Ferramentas de programação e o separador Rede. Aceda a
http://localhost:3000
e aí verá a nossa aplicação.
Ainda não existem heróis armazenados na aplicação. Na próxima parte deste tutorial, vamos adicionar funcionalidades put, push e delete. Em seguida, podemos adicionar, atualizar e eliminar heroes da IU com as ligações do Mongoose à nossa base de dados do Azure Cosmos DB.
Limpar os recursos
Quando já não precisar dos recursos, pode eliminar o grupo de recursos, a conta do Azure Cosmos DB e todos os recursos relacionados. Utilize os seguintes passos para eliminar o grupo de recursos:
- Aceda ao grupo de recursos onde criou a conta do Azure Cosmos DB.
- Selecione Eliminar grupo de recursos.
- Confirme o nome do grupo de recursos a eliminar e selecione Eliminar.
Passos seguintes
Continue para a Parte 6 do tutorial para adicionar funções Post, Put e Delete à aplicação:
Está a tentar planear a capacidade de uma migração para o Azure Cosmos DB? Pode utilizar informações sobre o cluster de bases de dados existentes para o planeamento de capacidade.
- Se tudo o que sabe é o número de vcores e servidores no cluster de bases de dados existente, leia sobre como estimar unidades de pedido com vCores ou vCPUs
- Se souber taxas de pedido típicas para a carga de trabalho atual da base de dados, leia sobre como estimar unidades de pedido com o planeador de capacidade do Azure Cosmos DB