Partilhar via


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:

  1. 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.

  2. 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.

  3. 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
      };
      
  4. No painel Explorador, em servidor, crie uma pasta com o nome ambiente. Na pasta de ambiente , crie um ficheiro com o nomeenvironment.js.

  5. No ficheiro mongo.js, temos de incluir valores para os dbNameparâmetros , , keye cosmosPort . 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:

  1. 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.

  2. No ficheiro environment.js , altere o valor de port para 10255.

    const port = 10255;
    
  3. 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.

  4. 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.

  5. 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:

  1. No painel Explorador, na pasta servidor , crie um ficheiro com o nome hero.model.js.

  2. 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:

  1. No painel Explorador, na pasta servidor , crie um ficheiro com o nome hero.service.js.

  2. 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 o hero.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:

  1. 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 a heroService.getHeroes função.

    router.get('/heroes', (req, res) => {
      heroService.getHeroes(req, res);
    //  res.send(200, [
    //      {"id": 10, "name": "Starlord", "saying": "oh yeah"}
    //  ])
    });
    
  2. No ficheiro routes.js , require o serviço hero:

    const heroService = require('./hero.service'); 
    
  3. No ficheiro hero.service.js, atualize a getHeroes função para utilizar os parâmetros e res da req 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:

  1. 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 .

  2. Agora, mude para o browser. Abra o Ferramentas de programação e o separador Rede. Aceda a http://localhost:3000e aí verá a nossa aplicação.

    Nova conta do Azure Cosmos DB no portal do Azure

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:

  1. Aceda ao grupo de recursos onde criou a conta do Azure Cosmos DB.
  2. Selecione Eliminar grupo de recursos.
  3. 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.