Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

Tutorial: implementar una aplicación Next.js en Vercel

En este tutorial, aprenderás a crear una aplicación Next.js que se conecta a MongoDB. También aprenderás a implementar la aplicación en Vercel, una plataforma que hostea aplicaciones de Next.js.

Nota

Este tutorial utiliza el Router de páginas Next.js en lugar del Router de aplicación que Next.js introdujo en la versión 13.

Antes de comenzar, sigue los siguientes pasos:

Este tutorial lo guía a través de los siguientes pasos:

  • Crea una aplicación Next.js.

  • Conecta MongoDB a Next.js.

  • query MongoDB desde Next.js.

  • Implementa tu aplicación en Vercel.

1

Puedes crear una aplicación Next.js con integración MongoDB usando la plantilla de ejemplo con-mongodb.

Para crear una nueva aplicación Next.js con integración con MongoDB, ejecuta el siguiente comando en tu terminal:

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

El comando utiliza npx create-next-app y el parámetro --example with-mongodb para crear una aplicación a partir del ejemplo de integración de MongoDB. sample_mflix es el nombre de la aplicación. Usa un nombre diferente si lo prefieres.

Una vez que el comando se complete, navegue a su directorio de proyecto ejecutando el siguiente comando:

cd sample_mflix

Instala las dependencias de npm ejecutando el siguiente comando:

npm install

Para iniciar tu aplicación Next.js, ejecuta el siguiente comando:

npm run dev

Después de compilar la aplicación, navegue a localhost:3000 en su navegador. La página muestra un mensaje de error porque aún no has proporcionado tu cadena de conexión de MongoDB.

2

El directorio de aplicaciones Next.js contiene un archivo env.local.example. Renombra este archivo a env.local y ábrelo. El archivo contiene una propiedad: MONGODB_URI.

Configure su cadena de conexión de MongoDB como el valor para la propiedad MONGODB_URI. Tu archivo env.local se parece al siguiente ejemplo:

MONGODB_URI=<Your connection string>

Para verificar tu configuración, reinicia tu aplicación de Next.js ejecutando el siguiente comando en tu terminal:

npm run dev

Cuando la aplicación se compile, navega a localhost:3000 en tu navegador. Ves la página de bienvenida de la aplicación with-mongodb Next.js.

Tip

Tu conexión es exitosa si ves el mensaje "Estás conectado a MongoDB". Si ves el mensaje "No estás conectado a MongoDB", verifica tu cadena de conexión y asegúrate de que tu usuario de base de datos y la conexión de red estén configurados correctamente.

3

Next.js admite varias formas de recuperar datos. Puedes crear endpoints API, ejecutar funciones renderizadas del lado del servidor para una página o generar páginas estáticas obteniendo datos en el momento de la construcción. Este tutorial muestra ejemplos de los tres métodos.

Para crear una nueva ruta de endpoint de API, crea un directorio api en tu directorio pages. Cada archivo que creas en el directorio api se convierte en un punto final (endpoint) API individual.

Cree un nuevo archivo en el directorio api llamado movies.tsx. Este endpoint devuelve una lista de películas de tu base de datos MongoDB. Agregar el siguiente código al archivo de 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}

El código anterior crea un punto de acceso API que devuelve las 10 mejores películas de la base de datos sample_mflix ordenadas por su calificación de metacritic en orden descendente. El método res.json sirve el array de películas en formato JSON al navegador. Cuando navegas a localhost:3000/api/movies, el navegador muestra una lista de películas devueltas desde tu base de datos.

Agrega más rutas de API creando archivos adicionales en el directorio api.

Puedes obtener datos directamente en tus páginas de Next.js utilizando el método getServerSideProps(). Este método está disponible cuando usas páginas de Next.js.

El método getServerSideProps() obliga a una página de Next.js a utilizar la renderización del lado del servidor para cargarse. Cada vez que se carga la página, el método getServerSideProps() se ejecuta en el backend, obtiene datos y los envía al componente React a través de props. El código dentro de getServerSideProps() nunca se envía al cliente.

Crear un archivo nuevo en el directorio pages llamado movies.tsx. El siguiente código muestra cómo usar getServerSideProps() para consultar 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};

El componente de la página Movies recibe las propiedades del método getServerSideProps() y utiliza esos datos para renderizar la página. La página muestra el título superior de la película, la calificación de metacritic y la trama.

Nota

El método getServerSideProps() se ejecuta cada vez que se llama a la página. Si tus datos no cambian con frecuencia, utiliza la generación de páginas estáticas en su lugar.

Puedes usar la generación de páginas estáticas para pre-renderizar las páginas durante el tiempo de construcción. Este método es útil cuando tus datos no cambian con frecuencia.

Crea un nuevo archivo en el directorio pages llamado top.tsx. El siguiente código muestra cómo usar getStaticProps() para renderizar las mil películas mejor valoradas de tu base de datos 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};

Cuando navegas a localhost:3000/top, el navegador muestra una lista de películas.

En el modo de desarrollo, la aplicación llama al método getStaticProps() cada vez, de forma similar al método getServerSideProps(). En el modo de producción, la página /top se pre-renderiza y se carga casi de inmediato.

Para ejecutar tu aplicación de Next.js en modo de producción, primero debes compilarla. Luego, ejecuta el comando start para servir la aplicación compilada. Ejecute los siguientes comandos en su terminal:

npm run build
npm run start

Cuando ejecutas el comando npm run start, Next.js sirve tu aplicación en modo de producción. El método getStaticProps() no se ejecuta cada vez que accedes a la ruta /top porque Next.js sirve la página de manera estática. Para ver la página estática pre-renderizada, consulta el archivo .next/server/pages/top.html.

4

Implemente su aplicación Next.js con MongoDB en Vercel. Antes de implementar, debes confirmar el código de la aplicación de los pasos anteriores en un repositorio de GitHub. Para aprender a crear una cuenta de Github y contribuir en un repositorio, consulta la documentación de GitHub.

Después de enviar tu código a un repositorio, navega a Vercel e inicia sesión. En tu tablero de Vercel, haz clic en el botón Importar Proyecto y luego haz clic en Importar Repositorio de Git.

Introduce la URL de tu repositorio de GitHub y haz clic en Continuar. En la siguiente pantalla, añade las variables de tu archivo env.local.

Haz clic en el botón implementar. Vercel compila e implementa automáticamente tu aplicación Next.js. Cuando se complete, recibirás una URL donde podrás acceder a tu aplicación.

Nota

Vercel utiliza direcciones IP dinámicas, por lo que debes añadir una excepción para acceder a tus datos desde cualquier dirección IP en el tablero de MongoDB Atlas. Para hacer esto, navega a la pestaña Acceso a red, haz clic en el botón Add IP Address, y luego haz clic en el botón Permitir acceso desde cualquier lugar.

Para más información sobre los conceptos tratados en este tutorial, consulta los siguientes recursos: