Partilhar via


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

APLICA-SE A: MongoDB

Este tutorial com várias partes demonstra como criar um aplicativo Node.js com Express e Angular e conectá-lo a ele à 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, você irá:

  • Use o Mongoose para se conectar ao Azure Cosmos DB.
  • Obtenha sua cadeia de conexã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 as etapas na Parte 4.

  • Este tutorial requer que você 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 você precisar instalar ou atualizar a CLI do Azure, consulte Instalar a CLI do Azure 2.0.

  • Este tutorial orienta você pelas etapas para criar o aplicativo 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.

Use Mongoose para se conectar

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

  1. Instale o módulo mongoose npm, que é uma API usada para falar com o MongoDB.

    npm install mongoose@5.13.15 --save
    

    Importante

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

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

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

    • Requer o Mongoose.

    • Substitui a promessa Mongo de usar a promessa básica que está incorporada no ES6/ES2015 e versões posteriores.

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

    • Inclui a cadeia de conexão MongoDB, que é definida no arquivo 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 Explorer, em servidor, crie uma pasta chamada ambiente. Na pasta de ambiente , crie um arquivo chamado environment.js.

  5. A partir do arquivo mongo.js, precisamos incluir valores para o dbName, o keye os cosmosPort parâmetros. Copie o seguinte código para o 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
    };
    

Obter a cadeia de ligação

Para conectar seu aplicativo ao Azure Cosmos DB, você precisa atualizar as definições de configuração do aplicativo. Use as seguintes etapas 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 da 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. 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 você criou na Parte 4 do tutorial.

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

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

Criar um modelo de hero

Em seguida, você precisa definir o esquema dos dados a serem armazenados no Azure Cosmos DB definindo um arquivo de modelo. Use as seguintes etapas para criar um modelo de herói que define o esquema dos dados:

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

  2. Copie o código a seguir para o arquivo 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 usando o esquema.
    • Exporta o modelo.
    • Nomeia a coleção Heroes (em vez de Heros, que é o nome padrão da coleção com base nas regras de nomenclatura plural 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 herói, você precisa definir um serviço para ler os dados e executar operações de lista, criação, exclusão e atualização. Use as seguintes etapas para criar um serviço Hero que consulta os dados do Azure Cosmos DB:

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

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

    • Obtém o modelo que você criou.
    • Conecta-se ao banco de dados.
    • Cria uma docquery variável que usa o hero.find método para definir uma consulta que retorna todos os heróis.
    • Executa uma consulta com a função com a docquery.exec promessa de obter uma lista de todos os heróis, onde o status de resposta é 200.
    • Envia de volta a mensagem de erro se o status for 500.
    • Obtém os heróis porque estamos usando 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, você precisa configurar rotas para lidar com as URLs para obter, criar, ler e excluir solicitações. 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 seguintes etapas para adicionar o serviço Hero e definir suas rotas:

  1. No Visual Studio Code, no arquivo routes.js , comente a res.send função que envia os dados do herói de exemplo. Em vez disso, 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 arquivo routes.js, require o serviço herói:

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

    function getHeroes(req, res) {
    

Vamos dedicar um minuto para rever e percorrer o código anterior. Primeiro, entramos no arquivo index.js, que configura o servidor de nó. Observe que ele configura e define suas rotas. Em seguida, seu arquivo routes.js conversa com o serviço herói e diz a ele para obter suas funções, como getHeroes, e passar a solicitação e resposta. O arquivo hero.service.js obtém o modelo e se conecta ao Mongo. Em seguida, ele executa getHeroes quando o chamamos, e retorna uma resposta de 200.

Executar a aplicação

Em seguida, execute o aplicativo usando as seguintes etapas:

  1. No Visual Studio Code, salve 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 navegador. Abra as ferramentas de desenvolvedor e a guia Rede. Vá para http://localhost:3000, e lá você vê nosso aplicativo.

    Nova conta do Azure Cosmos DB no portal do Azure

Ainda não há heróis armazenados no aplicativo. Na próxima parte deste tutorial, adicionaremos a funcionalidade put, push e delete. Em seguida, podemos adicionar, atualizar e excluir heróis da interface do usuário usando conexões Mongoose para nosso banco de dados do Azure Cosmos DB.

Clean up resources (Limpar recursos)

Quando não precisar mais dos recursos, você poderá excluir o grupo de recursos, a conta do Azure Cosmos DB e todos os recursos relacionados. Use as seguintes etapas para excluir o grupo de recursos:

  1. Vá para o grupo de recursos onde você criou a conta do Azure Cosmos DB.
  2. Selecione Eliminar grupo de recursos.
  3. Confirme o nome do grupo de recursos a ser excluído e selecione Excluir.

Próximos passos

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

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