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

Integre o MongoDB às funções do Vercel para a experiência sem servidor

Nic Raboy7 min read • Published Jun 28, 2022 • Updated Sep 09, 2024
Next.jsNode.jsJavaScript
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
{ Você está trabalhando com o Functions as a Service (FaaS), geralmente chamado de serverless, mas não consegue fazer seu banco de dados funcionar? Dada a natureza dessas funções sem servidor, interagir com um banco de dados é uma experiência um pouco diferente do que se você fosse criar seu próprio back-end totalmente hospedado.
Por que é uma experiência diferente, embora?
Os bancos de dados em geral, não apenas o MongoDB, podem ter uma quantidade finita de conexões simultâneas. Quando você hospeda seu próprio aplicativo da web, esse aplicativo normalmente se conecta ao seu banco de dados uma vez e enquanto o aplicativo estiver em execução, o mesmo acontece com a conexão com o banco de dados. No entanto, as funções oferecem uma experiência diferente. Em vez de um aplicativo sempre disponível, agora você está trabalhando com um aplicativo que pode ou não estar disponível no momento da solicitação para economizar recursos. Se você tentar se conectar ao seu banco de dados em sua lógica de função, correrá o risco de muitas conexões. Se a função desligar, hibernar ou semelhante, você correrá o risco de que sua conexão com o banco de dados não esteja mais disponível.
Neste tutorial, vamos ver como usar o driverdoMongoDB Node.js com funções do Vercel, algo bastante comum ao desenvolver aplicativos Next.js.

Os requisitos

Há alguns requisitos que devem ser atendidos antes de começar a usar este tutorial, dependendo de até onde você deseja ir.
  • Você deve ter um MongoDB Atlas cluster implantado, camada grátis (M0) ou melhor.
  • Você deve ter uma conta do Vercel se quiser implantar na produção.
  • Uma versão recente do Node.js e NPM deve estar disponível.
Neste tutorial, não vamos distribuir para a produção. Tudo o que planejamos fazer pode ser testado localmente, mas se você quiser implantar, precisará de uma conta no Vercel e da CLI instalada e configurada ou do seu hostGit . Ambos estão fora do escopo deste tutorial.
Embora entraremos em detalhes do MongoDB Atlas mais tarde neste tutorial, você já deve ter uma conta do MongoDB Atlas e um cluster implantado. Se precisar de ajuda com qualquer um deles, considere conferir este tutorial.
A grande coisa que você precisará é o Node.js. Nós o usaremos para desenvolver e testar nosso aplicativo Next.js.

Criando um novo aplicativo Next.js com a CLI

Criar um novo projeto Next.js é fácil quando se trabalha com a CLI. Em uma linha de comando, supondo que o Node.js esteja instalado, execute o seguinte comando:
Você será solicitado a fornecer algumas informações que resultarão na criação do seu projeto. A qualquer momento deste tutorial, você pode executar npm run dev para criar e atender seu aplicativo localmente. Você também poderá testar suas funções do Vercel!
Antes de prosseguirmos, vamos adicionar a dependência do driver MongoDB Node.js:
Não vamos explorá-lo neste tutorial, mas o Vercel oferece um modelo inicial com a integração do MongoDB Atlas já configurada. Se você quiser saber mais, confira o tutorial de Jesse Hall: How to Connect MongoDB Atlas to Vercel usando a nova integração. Em vez disso, vamos ver como fazer as coisas manualmente para ter uma ideia do que está acontecer em cada estágio do ciclo de desenvolvimento.

Configurando um cluster de banco de dados no MongoDB Atlas

Neste ponto, você já deve ter uma conta do MongoDB Atlas com um projeto e cluster criados. O nível gratuito é adequado para este tutorial.
Em vez de usar nossa mente para criar um novo conjunto de dados para esse exemplo, vamos usar um dos bancos de dados de amostra disponíveis para os usuários do MongoDB.
Carregar um conjunto de dados de amostra do MongoDB
Carregar um conjunto de dados de amostra do MongoDB
No painel do MongoDB Atlas, clique no menu de reticências de um dos clusters e, em seguida, escolha carregar os conjuntos de dados de amostra. Pode levar alguns minutos, então dê algum tempo.
Para este tutorial, usaremos o banco de dadossample_restaurants, mas, na verdade, isso não importa, pois o foco deste tutorial é a instalação e a configuração, e não os dados reais.
Com o conjunto de dados de amostra carregado, Go e crie um novo usuário na aba "Acesso ao banco de dados" do painel, seguido pela adição de seu IP às regras de "Acesso à rede". Você precisará fazer isso para se conectar ao MongoDB Atlas a partir do seu aplicativo Next.js. Se você optar por implantar seu aplicativo, precisará adicionar uma regra 0.0.0.0de acordo com adocumentação do Vercel.

Conecte-se ao MongoDB e conexões de cache para uma experiência otimizada para desempenho

Next.js is one of those technologies where there are a few ways to solve the problem. We could interact with MongoDB at build time, creating a 100% static generated website, but there are plenty of reasons why we might want to keep things adhoc in a serverless function.
Dentro do seu projeto Next.js, crie um .env.local arquivo com as seguintes variáveis:
Lembre-se de que estamos usando o banco de dadossample_restaurants neste exemplo, mas você pode ser ousado e usar o que quiser. Não se lembre de trocar as informações de conexão no arquivo.env.local pelas suas.
Em seguida, crie um arquivolib/mongodb.js em seu projeto. É aqui que trataremos das etapas reais de conexão. Preencha o arquivo com o seguinte código:
Pode não parecer muito, mas muitas coisas importantes estão acontecendo no arquivo acima, específicas para Next.js e funções sem servidor. Especificamente, dê uma olhada na funçãoconnectToDatabase:
O objetivo da função acima é fornecer-nos uma conexão de cliente para trabalhar, bem como um banco de dados. No entanto, os detalhes mais refinados sugerem que só precisamos estabelecer uma nova conexão se não existir uma e não enviar spam para nosso banco de dados com conexões se estivermos no modo de desenvolvimento para Next.js. O servidor de desenvolvimento local se comporta de forma diferente da que você teria na produção, por isso a necessidade de verificar.
Lembre-se, as quantidades de conexão são finitas e só devemos nos conectar se ainda não estivermos conectados.
Então, o que estamos fazendo na função é que primeiro verificamos se essa conexão existe. Em caso afirmativo, retorne-o e permita que o que estiver chamando a função use essa conexão. Se a conexão não existir e estivermos no modo de desenvolvimento, verificamos se temos uma sessão em cache e a usamos, se tivermos. Caso contrário, precisamos criar uma conexão e armazená-la em cache para o modo de desenvolvimento ou produção.
Se você entender alguma coisa do código acima, entenda que estamos apenas criando conexões se as conexões ainda não existirem.

Executando queries do MongoDB a partir de uma função do Vercel no aplicativo Next.js

Já fizemos a parte difícil. Temos um sistema de gerenciamento de conexões em vigor para o MongoDB ser usado em todo o nosso aplicativo Vercel. A próxima parte envolve a criação de endpoints de API, de forma quase idêntica ao Express Framework, e consumi-los a partir do frontend do Next.js.
Então, com o que isso se parece exatamente?
Em seu projeto, crie um arquivopages/api/list.js com o seguinte código JavaScript:
As funções do Vercel existem no diretóriopages/api. Neste caso, estamos criando uma função com o objetivo de listar dados. Especificamente, vamos listar dados de restaurantes.
Em nosso código acima, estamos aproveitando a funçãoconnectToDatabasede nosso código de gerenciamento de conexão. Quando executamos a função, estamos obtendo uma conexão sem nos preocuparmos se precisamos criar ou reutilizar uma. O código da função subjacente cuida disso para nós.
Com uma conexão, podemos encontrar todos os documentos dentro de uma coleção. Nem todos os campos são importantes para nós, então estamos usando uma projeção para excluir o que não queremos. Em vez de retornar todos os documentos dessa grande coleção, estamos limitando os resultados a apenas alguns.
Os resultados são retornados para qualquer código ou cliente externo que os solicite.
Se quiséssemos consumir o endpoint de dentro do aplicativo Next.js, poderíamos fazer algo como o seguinte no arquivopages/index.js:
Ignorando o código Next.js clichê, adicionamos um useState e useEffect como o seguinte:
O código acima consumirá a API quando o componente carregar. Podemos então renderizá-lo na seção a seguir:
Não há nada fora do comum acontecendo no processo de consumo ou renderização. O trabalho pesado que era importante estava na própria função, bem como em nosso arquivo de gerenciamento de conexões.

Conclusão

Você acabou de ver como usar o MongoDB Atlas com funções do Vercel, que é uma solução sem servidor que exige um tipo de abordagem diferente. Lembre-se, ao lidar com serverless, a disponibilidade de suas funções está no ar. Você não quer gerar muitas conexões e não quer tentar usar conexões que não existem. Resolvemos isso armazenando nossas conexões em cache e usando a conexão em cache, se disponível. Caso contrário, crie uma nova conexão.
Tem alguma dúvida ou acha que pode melhorar esta solução? Compartilhe-o nos MongoDB Community!

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Tutorial
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Artigo

Usar o AWS Rekognition para analisar e marcar imagens carregadas


Sep 11, 2024 | 1 min read
exemplo de código

Crie um site simples com React, Axios e uma REST API desenvolvida com o MongoDB Atlas App Services


Jan 26, 2023 | 4 min read
Artigo

AI Shop: o poder da LangChain, OpenAI e MongoDB Atlas trabalhando juntos


Sep 18, 2024 | 7 min read
Tutorial

Capturando menções de notícias de hackers com Node.js e MongoDB


Sep 09, 2024 | 8 min read
Sumário