Criar um aplicativo Angular com a API do Azure Cosmos DB para MongoDB – Usar o Mongoose para conectar-se ao Azure Cosmos DB

APLICA-SE A: MongoDB

Este tutorial com várias partes demonstra como criar um aplicativo Node.js com o Expresso e o Angular e conectá-lo à sua conta do Azure Cosmos DB configurada com a API para MongoDB do Azure Cosmos DB. Este artigo descreve a Parte 5 do tutorial e se baseia na Parte 4.

Nesta parte do tutorial, você:

  • Usar o Mongoose para conectar-se ao Azure Cosmos DB.
  • Obter a cadeia de conexão do Azure Cosmos DB.
  • Criará o modelo Hero.
  • Criará o serviço Hero para obter dados do Hero.
  • Execute o aplicativo localmente.

Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.

Pré-requisitos

  • Antes de iniciar este tutorial, conclua as etapas na Parte 4.

  • Este tutorial requer que você execute a CLI do Azure localmente. Você deve ter a CLI do Azure versão 2.0 ou posterior instalada. Execute az --version para encontrar a versão. Caso precise instalar ou atualizar a CLI do Azure, confira Instalar a CLI do Azure 2.0.

  • Este tutorial percorre passo a passo com você as etapas para compilar o aplicativo. Se você deseja baixar o projeto concluído, pode obter o aplicativo concluído no repositório angular-cosmosdb do GitHub.

Usar o Mongoose para se conectar

Mongoose é uma biblioteca de ODM (modelagem de dados de objeto) para o MongoDB e o Node.js. Você pode usar o Mongoose para se conectar à sua conta do Azure Cosmos DB. Use as etapas a seguir para instalar o Mongoose e conectar-se ao Azure Cosmos DB:

  1. Instale o módulo npm do Mongoose, que é uma API usada para se comunicar com o MongoDB.

    npm install mongoose@5.13.15 --save
    

    Importante

    O Azure Cosmos DB for MongoDB é compatível até a versão 5.13.15 do Mongoose. Para obter mais informações, confira a discussão sobre o problema no repositório GitHub do Mongoose.

  2. Na pasta server, crie um arquivo chamado mongo.js. Você adicionará os detalhes de conexão da conta do Azure Cosmos DB a esse arquivo.

  3. Copie o código a seguir para o arquivo mongo.js. O código oferece a seguinte funcionalidade:

    • Requer Mongoose.

    • Substitui a premissa do Mongo para usar a promessa básica compilada no ES6/ES2015 e em versões posteriores.

    • Chama um arquivo env que lhe permite configurar certas coisas com base no estágio em que você está, preparação, produção ou desenvolvimento. Você criará esse arquivo na próxima seção.

    • Inclui a cadeia de conexão do MongoDB, que é definida no arquivo env.

    • Cria uma função de conexão 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 do Explorer, em server, crie uma pasta chamada environment. Na pasta environment, crie um arquivo chamado environment.js.

  5. Do arquivo mongo.js, é preciso incluir valores para os parâmetros dbName, key e cosmosPort. Copie o código a seguir no arquivo environment.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
    };
    

Obtenha a cadeia de conexão

Para conectar seu aplicativo ao Azure Cosmos DB, você precisará atualizar as definições de configuração para o aplicativo. Use as etapas a seguir para atualizar as configurações:

  1. No portal do Azure, obtenha o número da porta, o nome da conta do Azure Cosmos DB e os valores de chave primária para sua conta do Azure Cosmos DB.

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

    const port = 10255;
    
  3. No arquivo environment.js, altere o valor de accountName para o nome da conta do Azure Cosmos DB que você criou na Parte 4 do tutorial.

  4. Recupere a chave primária para a conta do Azure Cosmos DB usando o seguinte comando de CLI na janela de terminal:

    az cosmosdb list-keys --name <cosmosdb-name> -g myResourceGroup
    

    <cosmosdb-name> é o nome da conta do Azure Cosmos DB que você criou na Parte 4 do tutorial.

  5. Copie a chave primária no arquivo environment.js como o valor de key.

Agora seu aplicativo tem todas as informações necessárias para se conectar ao Azure Cosmos DB.

Criar um modelo Hero

Em seguida, você precisará definir o esquema dos dados a armazenar no Azure Cosmos DB, definindo um arquivo de modelo. Use as etapas a seguir para criar um modelo do Hero que defina o esquema dos dados:

  1. No painel do Explorer, na pasta server, crie um arquivo chamado hero.model.js.

  2. Copie o código a seguir no arquivo hero.model.js. O código oferece a seguinte funcionalidade:

    • Requer Mongoose.
    • Cria um novo esquema com uma ID, um nome e uma fala.
    • Cria um modelo usando o esquema.
    • Exporta o modelo.
    • Nomeie a coleção Heroes (em vez de Heros, que é o nome padrão da coleção com base nas regras de nomenclatura no 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 serviço Hero

Depois de criar o modelo de Hero, você precisa definir um serviço para ler os dados e realizar operações de listagem, criação, exclusão e atualização. Use as etapas a seguir para criar um serviço Hero que consulta os dados do Azure Cosmos DB:

  1. No painel do Explorer, na pasta server, crie um arquivo chamado hero.service.js.

  2. Copie o código a seguir no arquivo hero.service.js. O código oferece a seguinte funcionalidade:

    • Obtém o modelo que você criou.
    • Conecta-se ao banco de dados.
    • Cria uma variável docquery que usa o método hero.find para definir uma consulta que retorna todos os heroes.
    • Executa uma consulta com a função docquery.exec para obter uma lista de todos os heroes, em que o status da resposta é 200.
    • Se o status é 500, envia de volta a mensagem de erro.
    • Já que estamos usando módulos, ele obtém os heroes.
    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, você precisa configurar rotas para lidar com as URLs para solicitações de obtenção, criação, leitura e exclusão. Os métodos de roteamento especificam funções de retorno de chamada (também chamadas de funções de manipulador). Essas funções são chamadas quando o aplicativo recebe uma solicitação para o ponto de extremidade especificado e o método HTTP. Use as etapas a seguir para adicionar o serviço Hero e define suas rotas:

  1. No Visual Studio Code, no arquivo routes.js, comente a função res.send que envia os dados de exemplo do Hero. Em vez disso, adicione uma linha para chamar a função heroService.getHeroes.

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

    const heroService = require('./hero.service'); 
    
  3. No arquivo hero.service.js, atualize a função getHeroes para usar os parâmetros req e res da seguinte maneira:

    function getHeroes(req, res) {
    

Levaremos um momento para analisar e vasculhar o código anterior. Primeiro, chegamos ao arquivo index.js, que configura o servidor de nó. Observe que ele configura e define suas rotas. Em seguida, seu arquivo routes.js se comunica com o serviço Hero e o manda obter funções como getHeroes, além de transmitir a solicitação e a resposta. O arquivo hero.service.js obtém o modelo e conecta-se ao Mongo. Em seguida, ele executa o getHeroes quando o chamamos e retorna uma resposta de 200.

Executar o aplicativo

Em seguida, execute o aplicativo usando as etapas a seguir:

  1. No Visual Studio Code, salve todas as suas alterações. À esquerda, selecione o botão Depurar e o botão Iniciar Depuração.

  2. Agora, alterne para o navegador. Abra as Ferramentas para desenvolvedores e a guia Rede. Vá para http://localhost:3000 e lá você verá nosso aplicativo.

    Nova conta do Azure Cosmos DB no portal do Azure

Ainda não há nenhum Hero armazenado no aplicativo. Na próxima parte deste tutorial, adicionaremos funcionalidades de inserção, de push e de exclusão. Poderemos então adicionar, atualizar e excluir heroes da interface do usuário usando conexões Mongoose para nosso banco de dados do Azure Cosmos DB.

Limpar os recursos

Quando esses recursos já não forem necessários, você poderá excluir o grupo de recursos, a conta do Azure Cosmos DB e todos os recursos relacionados. Use as etapas a seguir para excluir o grupo de recursos:

  1. Vá para o grupo de recursos em que você criou a conta do Azure Cosmos DB.
  2. Selecione Excluir grupo de recursos.
  3. Confirme o nome do grupo de recursos a excluir e selecione Excluir.

Próximas etapas

Continue para a Parte 6 do tutorial a fim de adicionar funções Post, Put e Delete ao aplicativo:

Tentando fazer o planejamento da capacidade para uma migração para o Azure Cosmos DB? Você pode usar informações sobre o cluster de banco de dados existente para fazer isso.