Ligando os motores
Nessa página, vamos começar a usar o Mongoose. Este livro foi criado para um curso na Udemy, sendo assim, o mesmo deve ser usado em junção com o curso, para maior desempenho.
Last updated
Was this helpful?
Nessa página, vamos começar a usar o Mongoose. Este livro foi criado para um curso na Udemy, sendo assim, o mesmo deve ser usado em junção com o curso, para maior desempenho.
Last updated
Was this helpful?
Nessa página, vamos começar a usar o Mongoose. Mongoose, de forma bem simples, é uma biblioteca desenvolvida para facilitar a interface entre MongoDB e Node.js.
Este livro foi criado para um curso na Udemy, sendo assim, o mesmo deve ser usado em junção com o curso, para maior desempenho. Uma versão presencial também foi lançada, estamos esperando os alunos para começar. .
SIMON HOLMES; CLIVE HARBER. Getting MEAN WITH MONGO, EXPRESS, ANGULAR, AND NODE. SECOND EDITION. Manning Shelter Island. 2019 by Manning Publications Co. Vai ser chamado de Simon&Cliver (2019).
Apesar do curso ser sobre Mongoose, o Mongoose trabalha como suporte para a interação entre o MongoDB e Express (Nodej.s).
IMP. certifique-se de que você tem o MongoDB e Node.js instalados.
Vamos usar o npm
como instalador e gerenciador de pacotes. Uma alternativa seria o yarn
. Com exceção de diferenças iniciais, quando o yarn
foi lançado, ou quando o usamos React, os dois gerenciadores de pacotes parecem o mesmo. Eu, pessoalmente, salve casos pontuais, não vejo a diferença.
Crie um package.json
, antes de instalar o Mongoose, isso vai ajudar depois a gerenciar tudo.
Agora, instala o Mongoose! 😀😀
Seu arquivo package.json
deve ter o seguinte formado, para efeito de clareza:
Vamos criar uma aplicação que salva gatos🐱🐱🐱, perfeito para compartilhar no WhatsApp!😂😂😂 Gatinhos peludos e com olhos grandes.
Vamos fazer nosso primeiro esquema, não me refiro a achar uma forma de ganhar vantagens nos outros 😂😂😂.
MongoDB é um banco de dados não relacional (NoSQL). Pode-se fazer qualquer coisa no sentido de formato, esqueça o Excel e comece a pensar orientado a objetos. Você pode salvar no mesmo espaço um gato com 3 patas e um gato com duas, um gato que tem pedigree, e outro que não tem, um gato que tem dono, e outro que não tem. Por agora, não vou entrar nos méritos dessa nova forma de guardar informação, somente aceite que existem vantagens, e desvantagens.... no mundo da programação se diz "no free lunch".
Estamos dizendo para o Mongoose que os gatos fofinhos precisam de um nome.
Agora precisamos dizer para o Mongoose: "salva aí pô!". Em linguagem do Mongoose:
Isso cria um esquema que pode inclusive ser acessado de outras partes da aplicação, como uma variável global. Legal não?!🙃 Calma aí que o Brasil ainda é nosso, vamos usar isso em combate no futuro!
Finalmente, fechamos o ciclo:
Isso fecha o ciclo.
Para mim, como programador Java, com muito orgulho, adorei essa funcionalidade. Basicamente, pode-se criar métodos para manipular cada campo, or "path" usando a linguagem do Mongo.
Caso esteja seguindo por aqui, antes da compilação do esquema, coloque:
Depois da compilação do esquema, coloque:
Isso vai imprimir a mensagem "Meow name is fluffy".
Lembra que imprimimos a saída do esquema? para testarmos se havia realmente salvado o nome do gato no esquema?
Aquilo que fizemos foi um teste, "meia boca"😂😂😂, mas foi. E se criássemos um teste que simplesmente diria "passou" ou "não passou". Isso pode ser interpretado facilmente, além de poder ser automatizado em processos de deploys.
Geralmente, o arquivo de teste leva o mesmo nome do arquivo que será testado +.test.js
Isso cria nosso primeiro teste com Jest. Isso faz o mesmo que foi feito com console.log, exceto que:
O teste é automatizado, pode ser facilmente interpretado tanto por outros programadores quanto por sistemas automatizados de deploy;
O teste não interfere com o código, enchendo de console.log, que depois precisamos lembrar de remover;
O teste não ativa nada além do que está sendo testando, como no caso de testar os esquemas do Mongoose que vamos fazer no futuro.
O teste foi um sucesso! Agora tente testar se o Mongoose aceita o seguinte para criar o documento:
Adicione o seguinte ao seu arquivo de teste:
O teste vai falhar! Eu sei que isso incomoda, contudo, faz parte do processo do TDD. Antes de continuar, porque está falhando?? qual a forma mais simples de se resolver isso?
Para passar, somente adicione isso antes de compilar seu esquema Mongoose, no arquivo de definição do esquema:
Nosso teste passou. Sem querer ser estraga momentos, esse foi fácil!! Conseguimos acertar de primeiras. Em outros cenários, será necessário refazer os códigos mais de uma vez.
Esse código salva o documento no Mongoose.
Nosso próximo teste é sobre o ID devolvido.
Estou escrevendo na Wikipédia em inglês sobre o , você pode ajudar tanto traduzindo para o português quanto escrevendo na Wiki em inglês mesmo.💪💪👌
Sugestão de leitura, inglês: ,
Isso que estamos fazendo é para o Mongoose, não para o MongoDB, para o Mongo, isso não importa. Lembre-se que o Mongo basicamente aceita qualquer coisa, desde que esteja em formato JSON. Se no futuro, além de nome, você quiser acrescentar o dono, somente mude o esquema, não precisa mudar mais nada. Parece-me, baseado em leituras e tutoriais que achei por acaso no YouTube, que bancos de dados SQL apresentam problemas quando precisamos mudar o banco de dados de formato, exigindo o que eles chamam de Migrations. Leitura sugerida, inglês: ""
Para os testes, vamos usar uma biblioteca npm
chamada de .
Estamos fazendo o que é conhecido como Test Driven Development (TDD). A ideia é focar nos testes. Isso, além de automatizar os testes, também, segundo especialistas, ajuda o programador a "receber" feedbacks constantemente no decorrer do desenvolvimento dos códigos, mais discussões em Test-Driven Development: Teste e Design no Mundo Real por Mauricio Aniche. Existe no meu canal um vídeo bem simples, ver . Não vamos focar em TDD, nem em metodologias de testes semelhantes, como BDD. Essa parte foi adicionada somente para incentivar o uso do TDD, e também para enriquecer o curso, ir além do "feijão com arroz".
Sugestão de leitura: ""
Vamos testar isso em TDD! O que vamos fazer é conhecido como teste de unidade, ou em inglês. Nesse tipo de teste, estamos testando a menor unidade de código possível. O oposto seria teste de integração, ou .
Como estamos começando, esquentando os motores, o teste que vamos fazer é simples, contudo, o Jest tem muito mais, como spy, mock...ver documentação do . Vamos cobrir neste curso somente o relacionado ao Mongoose, que é o foco do curso, e mesmo assim, não pretendo ser exaustivo.
No MongoDB, cada conjunto de atributos, ou paths na linguagem do Mongoose, é salvo em um documento. Para os que vem do mundo SQL, não existem tabelas, parece mais com uma classe em Java ( )
Todo o código que fizemos até agora fica o mesmo, vamos apenas testar se tudo salva como planejado. Encontra-se uma cópia do que fizemos até agora.
Você precisa somente colocar como chain o método lean()
Ver documentação .
Note que os testes aqui foram apenas para efeito de estudar a documentação oficial do Mongoose. Em um cenário real, além destes testes para garantir a integridade das funcionalidades básica, você terá de adicionar mais testes. Ver por curiosidade um vídeo que fiz de TDD em uma função que transforma números romanos em ordinários.
Usamos o pacote . Este pacote testa o ID devolvido contra os padrões do MongoDB. No Mongo, o usuário pode redefinir esse ID. Geralmente, não se aconselha a redefinir porque o Mongo já tem uma rotina otimizada para garantir restrições como unicidade de cada id dos documentos. Caso defina seu ID, pode usar ferramentas como .