EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
JavaScriptchevron-right

Introdução ao Deno & MongoDB

Jesse Hall12 min read • Published Jan 21, 2022 • Updated Sep 09, 2024
AtlasData APITypeScriptJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Alguns recursos mencionados abaixo serão descontinuados em 30, 2025 de setembro. Saiba mais.
Deno é um tempo de execução "modern " para JavaScript e TypeScript criado no Rust. Isso torna muito rápido!
Se você está familiarizado com o Node.js, se sentirá em casa com o Deno. É muito semelhante, mas tem algumas melhorias em relação ao Node.js. Na verdade, o criador do Deno, Ryan Dahl, também criou o Node e Deno deve ser o sucessor do Node.js.
} Curiosidade: Deno é um anagrama. Reorganizar as letras no nó para escrever Deno.
O Deno não tem gerenciador de pacotes, usa módulos ES , tem de primeira classe ,await tem testes integrados e é um tanto compatível com o navegador ao fornecer embutido fetch e o window objeto global .
Além disso, também é muito seguro. Ele é completamente bloqueado por padrão e exige que você habilite cada método de acesso especificamente.
Isso faz com que o Deno emparelhe bem com o MongoDB, pois ele também é super seguro por padrão.

Versão do vídeo

Aqui está uma versão em vídeo deste artigo, se você preferir assistir.

Pré-requisitos

  • TypeScript — O Deno usa o TypeScript por padrão, portanto, é necessário algum conhecimento do TypeScript.
  • Conhecimento básico de MongoDB
  • Noções básicas sobre APIs RESTful

Configurando o Deno

Você precisará instalar o Deno para começar.
  • macOS e Linux Shell:
    curl -fsSL https://deno.land/install.sh | sh
  • Windows PowerShell:
    iwr https://deno.land/install.ps1 -useb | iex
Para mais opções, aqui estão as instruções de instalação do Deno .

Configuração de middleware e roteamento

Para este tutorial, usaremos o Oak, uma estrutura de middleware para o Deno. Isso fornecerá roteamento para nossos vários pontos de extremidade de aplicativos para realizar operações CRUD.
Começaremos criando um arquivo server.tse importando o método OakApplication.
} Se você estiver familiarizado com o Node.js, notará que o Deno faz as coisas de forma um pouco diferente. Em vez de usar um arquivopackage.json e baixar todos os pacotes para o diretório do projeto, o Deno usa caminhos de arquivo ou URL para fazer referência às importações do módulo. Os módulos são baixados e armazenados em cache localmente, mas isso é feito globalmente e não por projeto. Isso elimina muito do bloat inerente ao Node.js e sua pastanode_modules .
Em seguida, vamos iniciar o servidor.
Vamos criar nossas rotas em um novo arquivo chamado routes.ts. Desta vez, importaremos o métodoRouter do Oracle. Em seguida, crie uma nova instância de Router() e exporte-a.
Agora, vamos trazer nosso router para nosso arquivoserver.ts.

Configurando a API de dados do MongoDB

Na maioria dos tutoriais, você verá que eles usam o móduloMongo de terceiros. Para este tutorial, usaremos a nova MongoDB Atlas Data API para interagir com nosso MongoDB Atlas no Mongo. A MongoDB Atlas Data API não exige nenhum driver!
Vamos configurar nossa MongoDB Atlas MongoDB Atlas Data API. Você precisará de uma conta do MongoDB Atlas. Se você já tiver um, entreou registre-se agora.
No Painel do MongoDB Atlas, clique na opção Atlas Data API. Por padrão, todos os clusters do MongoDB Atlas têm a Atlas Data API desativada. Vamos habilitá-lo para o nosso cluster. Você pode desligá-lo novamente a qualquer momento.
Depois de ativar o MongoDB Atlas Data API, precisaremos criar uma API. Você pode nomear sua chave o que quiser. Vou nomear o meu data-api-test. Certifique-se de copiar seu segredo de chave API neste ponto. Você não o verá de novo!
Além disso, anote o ID do seu aplicativo. Ele pode ser encontrado em seu ponto de conexão da URL para a API de dados.
Exemplo: https://data.mongodb-api.com/app/{APP_ID}/endpoint/data/beta

Configuração de cada rota

Neste ponto, precisamos configurar cada função para cada rota. Eles serão responsáveis por criar, ler, atualizar e excluir (CRUD) documentos em nosso banco de dados MongoDB.
Vamos criar uma nova pasta chamada controllers e um arquivo dentro dela chamado todos.ts.
Em seguida, configuraremos nossas variáveis ambientais para manter nossos segredos seguros. Para isso, usaremos um módulo chamado dotenv.
Aqui, estamos importando o métodoconfig desse módulo e, em seguida, usando-o para obter nossas variáveis ambientaisDATA_API_KEY e APP_ID . Eles serão extraídos de outro arquivo que criaremos na raiz do nosso projeto chamado .env. Apenas a extensão e nenhum nome de arquivo.
Esse é um arquivo de texto simples que permite armazenar segredos que você não deseja que sejam carregados no GitHub ou exibidos em seu código. Para garantir que eles não sejam carregados no GitHub, criaremos outro arquivo na raiz do nosso projeto chamado .gitignore. Novamente, apenas a extensão sem nome.
Neste arquivo, digitaremos simplesmente .env. Isso permite que git saiba ignorar este arquivo para que ele não seja rastreado.
Agora, de volta ao arquivotodos.ts. Configuraremos algumas variáveis que serão usadas ao longo de cada função.
Configuraremos nosso URI base para nosso endpoint do Atlas Data API. Isso utilizará nosso ID do aplicativo. Então precisamos definir nossa fonte de dados, banco de dados e coleção. Eles seriam específicos para o seu caso de uso. E, por fim, definiremos nossas opções de busca, passando nossa chave da API de dados.

Criar rota

Agora podemos finalmente começar a criar nossa primeira função de rota. Chamaremos essa função de addTodo. Essa função adicionará um novo item de tarefa à nossa coleção de banco de dados.
Esta função aceitará um request e response. Se o request não tiver um body, ele retornará um erro. Caso contrário, obteremos o todo do body do request e usaremos o ponto de extremidade da API de dados do AtlasinsertOnepara inserir um novo documento em nosso banco de dados.
Fazemos isso criando um query que define nosso dataSource, database, collectione o document que estamos adicionando. Isso é definido em string e enviado usando fetch. O fetchtambém está embutido no Deno; não há necessidade de outro módulo como no Node.js.
Também agrupamos todo o conteúdo da função com um try..catch para nos informar se houver algum erro.
Se tudo correr bem, retornaremos um status de 201 e um response.body.
Por último, exportaremos esta função para ser usada em nosso arquivoroutes.ts. Então, vamos fazer isso a seguir.

Testando a rota de criação

Vamos testar nossa rota de criação. Para iniciar o servidor, executaremos o seguinte comando:
deno run --allow-net --allow-read server.ts
Como mencionado anteriormente, o Deno é bloqueado por padrão. Temos de especificar que o acesso à rede é permitido usando o sinalizador --allow-nete que o acesso de leitura ao diretório do projeto é permitido para ler nossas variáveis ambientais usando o sinalizador--allow-read.
Agora nosso servidor deve estar escutando na porta 3000. Para testar, podemos usar Postman, Insoniaou o meu favorito, a extensãoThophyllum Client no VS Code.
Faremos uma solicitação POSTparalocalhost:3000/api/todos e incluiremos no body da nossa solicitação o JSON document que queremos adicionar.
💡 Normalmente, eu não criaria um ID manualmente. Eu confiaria no ObjectID gerado pelo MongoDB, _id. Isso exigiria a adição de outro módulo Deno a este projeto para converter o BSON ObjectId. Eu queria manter este tutorial o mais simples possível.
Se tudo correr bem, receberemos uma resposta bem-sucedida.

Rota de leitura de todos os documentos

Agora vamos para as rotas de leitura. Começaremos com uma rota que obtém todos os nossos todos chamados getTodos.
Este será direcionado para o MongoDB Atlas Data APIfind . Não passaremos nada além de dataSource, databasee collection para nosso query. Isto retornará todos os documentos da collection especificada.
Em seguida, precisaremos adicionar essa função às nossas exportações na parte inferior do arquivo.
Em seguida, adicionaremos essa função e rota ao nosso arquivoroutes.ts também.

Testando a rota de leitura de todos os documentos

Como fizemos alterações, precisaremos reiniciar nosso servidor usando o mesmo comando de antes:
deno run --allow-net --allow-read server.ts
Para testar essa rota, enviaremos uma solicitação GETparalocalhost:3000/api/todos desta vez, sem nada em nossa solicitação body.
Desta vez, devemos ver o primeiro documento que inserimos em nossa resposta.

Leia uma rota de documento único

Em seguida, configuraremos nossa função para ler um único documento. Chamaremos isso getTodo.
Essa função utilizará o findOne endpoint Data API e, dessa filter vez, passaremos para nosso query.
Usaremos a consulta params do nosso URL para obter o ID do documento pelo qual filtraremos.
Em seguida, precisamos exportar essa função também.
Importaremos a função e configuraremos nossa rota no arquivoroutes.ts.

Testando a rota de leitura de documento único

Lembre-se de reiniciar o servidor. Esta rota é muito semelhante à rota "read all documents ". Desta vez, precisaremos adicionar um ID ao nosso URL. Vamos usar: localhost:3000/api/todos/1.
Devemos ver o documento com todoId de 1.
} Para testar ainda mais, tente adicionar mais documentos de teste utilizando o métodoPOST e, em seguida, execute os dois métodosGET novamente para ver os resultados.

Atualizar rota

Agora que temos documentos, vamos configurar nossa rota de atualização para nos permitir fazer alterações nos documentos existentes. Chamaremos essa função updateTodo.
Esta rota aceitará três argumentos: params, requeste response. O params nos dirá qual documento atualizar e o request nos dirá o que atualizar.
Usaremos o updateOne Atlas Data API e definiremos filter e update em nosso query.
O filter indicará o documento que está sendo atualizado e o update usará o operador$setpara atualizar os campos do documento.
Os dados atualizados virão de nosso request.body.
Vamos exportar esta função na parte inferior do arquivo.
Importaremos a função e configuraremos nossa rota no arquivoroutes.ts.
Essa rota usará o métodoPUT.

Testando a rota de atualização

Lembre-se de reiniciar o servidor. Para testar esta rota, usaremos uma combinação dos testes anteriores.
Nosso método será PUT. Nossa URL será localhost:3000/api/todos/1. E incluiremos um JSON document em nosso body com os campos atualizados.
Nossa resposta desta vez indicará se um documento foi encontrado ou correspondido e se foi feita uma modificação. Aqui vemos que ambos são verdadeiros.
Se executarmos uma solicitaçãoGET nesse mesmo URL, verá que o documento foi atualizado!

Excluir rota

A seguir, configuraremos nossa rota de exclusão. Chamaremos este de deleteTodo.
Essa rota usará o deleteOne Data API endpoint e filterusará o URL params.
Vamos exportar esta função.
E nós o importaremos e configuraremos sua rota no arquivoroutes.ts.

Testando a rota de exclusão

Lembre-se de reiniciar o servidor. Este teste usará o métodoDELETE. Excluiremos o primeiro a fazer usando esta URL: localhost:3000/api/todos/1.
Nossa resposta indicará quantos documentos foram excluídos. Nesse caso, devemos ver que um foi excluído.

Bônus: Rota de agregação

Vamos criar mais uma rota de treinamento. Este demonstrará um pipeline de agregação básico usando o MongoDB Atlas Data API. Chamaremos isso getIncompleteTodos.
Para essa rota, usaremos o endpoint aggregate Data API endpoint. Esse endpoint aceitará um pipeline.
Podemos passar qualquer pipeline de agregação por esse endpoint. Nosso exemplo será básico. O resultado será uma contagem de Todos incompletos.
Vamos exportar esta função final.
E vamos importá-lo e definir nossa rota final no arquivoroutes.ts.

Testando a rota de agregação

Lembre-se de reiniciar o servidor. Este teste utilizará o métodoGET e esta URL: localhost:3000/api/todos/incomplete/count.
Adicione alguns test Todos ao banco de dados e marque alguns como completos e outros como incompletos.
Nossa resposta mostra a contagem de todos incompletos.

Conclusão

Criamos um servidor Deno que usa a API de dados do MongoDB Atlas para criar, ler, atualizar e excluir documentos (CRUD) em nosso banco de dados MongoDB. Adicionamos uma rota bônus para demonstrar o uso de um pipeline de agregação com a MongoDB Atlas Data API. E agora?
Se quiser ver o código concluído, você pode encontrá-lo aqui. Você deve ser capaz de usar isso como ponto de partida para seu próximo projeto e modificá-lo para atender às suas necessidades.
Eu adoraria ouvir seus comentários ou perguntas. Vamos conversar na MongoDB Community.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Início rápido
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Desmistificando procedimentos armazenados no MongoDB


Aug 01, 2024 | 6 min read
Início rápido

MongoDB e Node.js 3.3.2 Tutorial - Operações CRUD


Apr 20, 2023 | 17 min read
Artigo

Visualização técnica de um plug-in Realm Flipper


Apr 02, 2024 | 3 min read
Início rápido

Conecte-se a um MongoDB database usando Node.js


Nov 29, 2023 | 6 min read
Sumário