Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Menu Docs
Página inicial do Docs
/ /

Tutorial: Implantar um aplicativo Next.js no Vercel

Neste tutorial, você aprenderá como criar um aplicativo Next.js que se conecta ao MongoDB. Você também aprenderá como implantar o aplicativo no Vercel, uma plataforma que hospeda aplicativos Next.js.

Observação

Este tutorial utiliza o roteador de páginas Next.js em vez do roteador de aplicativo que o Next.js introduziu na versão 13.

Antes de começar, conclua as seguintes etapas:

  • Complete o guia Iniciar MongoDB para configurar uma nova conta Atlas e carregar dados de amostra em uma nova implantação MongoDB de camada grátis.

  • Obtenha a string de conexão para seu cluster e salve-a para uso posterior neste tutorial.

  • Crie uma conta do Vercel acessando o website do Vercel.

  • Baixe o Node.js versão 18 ou posterior.

  • Certifique-se de ter o npm e o npx instalados.

Este tutorial orienta você nas seguintes etapas:

  • Criar um aplicativo Next.js.

  • Conecte o MongoDB ao Next.js.

  • Consulte o MongoDB do Next.js.

  • Implante seu aplicativo no Vercel.

1

Você pode criar um aplicativo Next.js com integração MongoDB usando o modelo de exemplo with-mongodb.

Para criar um novo aplicativo Next.js com integração MongoDB, execute o seguinte comando no seu terminal:

npx create-next-app --example with-mongodb sample_mflix

O comando utiliza npx create-next-app e o parâmetro --example with-mongodb para criar um aplicativo a partir do exemplo de integração MongoDB . sample_mflix é o nome do aplicativo. Use um nome diferente, se preferir.

Após a conclusão do comando, navegue até o diretório do projeto executando o seguinte comando:

cd sample_mflix

Instale as dependências npm executando o seguinte comando:

npm install

Para iniciar seu aplicativo Next.js, execute o seguinte comando:

npm run dev

Após a compilação do aplicativo, navegue até localhost:3000 em seu navegador. A página exibe uma mensagem de erro porque você ainda não forneceu sua string de conexão do MongoDB.

2

O diretório de aplicativo Next.js contém um arquivo env.local.example. Renomeie este arquivo para env.local e abra-o. O arquivo contém uma propriedade: MONGODB_URI.

Configure sua string de conexão do MongoDB como o valor da propriedade MONGODB_URI. Seu arquivo env.local é semelhante ao exemplo a seguir:

MONGODB_URI=<Your connection string>

Para verificar a configuração, reinicie o aplicativo Next.js executando o seguinte comando no terminal:

npm run dev

Quando o aplicativo for compilado, navegue até localhost:3000 em seu navegador. Você vê a página de boas-vindas do aplicativo with-mongodb Next.js.

Dica

Sua conexão é bem-sucedida se você vir a mensagem "Você está conectado ao MongoDB". Se você vir a mensagem "Você NÃO está conectado ao MongoDB", verifique sua string de conexão e certifique-se de que o usuário de banco de dados e a conexão de rede estejam configurados corretamente.

3

Next.js oferece suporte a várias maneiras de recuperar dados. Você pode criar pontos de extremidade de API, executar funções renderizadas do lado do servidor para uma página ou gerar páginas estáticas obtendo dados no tempo de compilação. Este tutorial mostra exemplos de todos os três métodos.

Para criar uma nova rota de ponto de extremidade da API, crie um diretório api no seu diretório pages. Cada arquivo criado no diretório api se torna um ponto de extremidade de API individual.

Crie um novo arquivo no diretório api denominado movies.tsx. Este ponto de extremidade retorna uma lista de filmes do seu banco de dados MongoDB . Adicione o seguinte código ao arquivo movies.tsx:

1import clientPromise from "../../lib/mongodb";
2import { NextApiRequest, NextApiResponse } from 'next';
3
4export default async (req: NextApiRequest, res: NextApiResponse) => {
5 try {
6 const client = await clientPromise;
7 const db = client.db("sample_mflix");
8 const movies = await db
9 .collection("movies")
10 .find({})
11 .sort({ metacritic: -1 })
12 .limit(10)
13 .toArray();
14 res.json(movies);
15 } catch (e) {
16 console.error(e);
17 }
18}

O código anterior cria um ponto de extremidade de API que retorna os 10 principais filmes do banco de dados sample_mflix classificados por sua classificação metacritic em ordem decrescente. O método res.json serve a array de filmes no formato JSON para o navegador. Quando você navega até localhost:3000/api/movies, o navegador exibe uma lista de filmes retornados do seu banco de dados.

Adicione mais rotas API criando arquivos adicionais no diretório api.

Você pode obter dados diretamente em suas páginas Next.js usando o método getServerSideProps(). Este método está disponível quando você usa páginas Next.js.

O método getServerSideProps() força uma página Next.js a usar a renderização do lado do servidor para carregar. Toda vez que a página carrega, o método getServerSideProps() executa no backend, obtém dados e os envia para o componente React por meio de acessórios. O código dentro de getServerSideProps() nunca é enviado ao cliente.

Crie um novo arquivo no diretório pages denominado movies.tsx. O seguinte código mostra como utilizar o getServerSideProps() para query MongoDB:

1import clientPromise from "../lib/mongodb";
2import { GetServerSideProps } from 'next';
3
4interface Movie {
5 _id: string;
6 title: string;
7 metacritic: number;
8 plot: string;
9}
10
11interface MoviesProps {
12 movies: Movie[];
13}
14
15const Movies: React.FC<MoviesProps> = ({ movies }) => {
16 return (
17 <div>
18 <h1>Top 20 Movies of All Time</h1>
19 <p>
20 <small>(According to Metacritic)</small>
21 </p>
22 <ul>
23 {movies.map((movie) => (
24 <li key={movie._id}>
25 <h2>{movie.title}</h2>
26 <h3>{movie.metacritic}</h3>
27 <p>{movie.plot}</p>
28 </li>
29 ))}
30 </ul>
31 </div>
32 );
33};
34
35export default Movies;
36
37export const getServerSideProps: GetServerSideProps = async () => {
38 try {
39 const client = await clientPromise;
40 const db = client.db("sample_mflix");
41 const movies = await db
42 .collection("movies")
43 .find({})
44 .sort({ metacritic: -1 })
45 .limit(20)
46 .toArray();
47 return {
48 props: { movies: JSON.parse(JSON.stringify(movies)) },
49 };
50 } catch (e) {
51 console.error(e);
52 return { props: { movies: [] } };
53 }
54};

O componente de página Movies recebe os props do método getServerSideProps() e utiliza esses dados para renderizar a página. A página mostra o título do filme principal, classificação metacritic e roteiro.

Observação

O método getServerSideProps() é executado toda vez que a página é chamada. Se seus dados não mudarem com frequência, use a geração de páginas estáticas.

Você pode usar a geração de páginas estáticas para pré-renderizar páginas no tempo de criação. Este método é útil quando seus dados não mudam com frequência.

Crie um novo arquivo no diretório pages denominado top.tsx. O código a seguir mostra como usar getStaticProps() para renderizar os mil filmes mais bem avaliados do seu banco de dados MongoDB :

1import { ObjectId } from "mongodb";
2import clientPromise from "../lib/mongodb";
3import { GetStaticProps } from "next";
4
5interface Movie {
6 _id: ObjectId;
7 title: string;
8 metacritic: number;
9 plot: string;
10}
11
12interface TopProps {
13 movies: Movie[];
14}
15
16export default function Top({ movies }: TopProps) {
17 return (
18 <div>
19 <h1>Top 1000 Movies of All Time</h1>
20 <p>
21 <small>(According to Metacritic)</small>
22 </p>
23 <ul>
24 {movies.map((movie) => (
25 <li key={movie._id.toString()}>
26 <h2>{movie.title}</h2>
27 <h3>{movie.metacritic}</h3>
28 <p>{movie.plot}</p>
29 </li>
30 ))}
31 </ul>
32 </div>
33 );
34}
35
36export const getStaticProps: GetStaticProps<TopProps> = async () => {
37 try {
38 const client = await clientPromise;
39
40 const db = client.db("sample_mflix");
41
42 const movies = await db
43 .collection("movies")
44 .find({})
45 .sort({ metacritic: -1 })
46 .limit(1000)
47 .toArray();
48
49 return {
50 props: { movies: JSON.parse(JSON.stringify(movies)) },
51 };
52 } catch (e) {
53 console.error(e);
54 return {
55 props: { movies: [] },
56 };
57 }
58};

Quando você navega até localhost:3000/top, o navegador exibe uma lista de filmes.

No modo de desenvolvimento, seu aplicativo chama o método getStaticProps() todas as vezes, semelhante ao método getServerSideProps(). No modo de produção, a página /top pré-renderiza e carrega quase que imediatamente.

Para executar seu aplicativo Next.js no modo de produção, crie-o primeiro. Em seguida, execute o comando start para servir o aplicativo criado. Execute os seguintes comandos no seu terminal:

npm run build
npm run start

Quando você executa o comando npm run start, o Next.js serve seu aplicativo no modo de produção. O método getStaticProps() não é executado toda vez que você acessa a rota /top porque Next.js serve a página estaticamente. Para ver a página estática pré-renderizada, visualize o arquivo .next/server/pages/top.html.

4

Implante seu aplicativo Next.js com MongoDB no Vercel. Antes de implantar, você deve confirmar o código do aplicativo das etapas anteriores em um repositório do GitHub. Para saber como criar uma conta no Github e confirmar em um repositório, consulte a documentação do GitHub.

Depois de confirmar seu código em um repositório, navegue até Vercel e conectar. No dashboard do Vercel, clique no botão Importar Projeto e, em seguida, clique em Importar Repositório Git.

Insira a URL do repositório do GitHub e clique em Continuar. Na próxima tela, adicione as variáveis do seu arquivo env.local.

Clique no botão Implantar. O Vercel cria e implementa automaticamente seu aplicativo Next.js. Quando ele for concluído, você receberá um URL onde poderá acessar seu aplicativo.

Observação

O Vercel usa endereços IP dinâmicos, portanto, você deve adicionar uma exceção para acessar seus dados a partir de qualquer endereço IP no painel do MongoDB Atlas . Para fazer isso, navegue até a aba Acesso à rede, clique no botão Add IP Address e, em seguida, clique no botão Permitir acesso de qualquer lugar.

Para obter mais informações sobre os conceitos deste tutorial, consulte os seguintes recursos:

Voltar

Integração com Prisma

Nesta página