Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

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

En este tutorial, aprenderá a crear una aplicación Next.js que se conecta a MongoDB. También aprenderá a implementarla en Vercel, una plataforma que aloja aplicaciones Next.js.

Nota

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

Antes de comenzar, sigue los siguientes pasos:

  • Completa la Guía de inicio de MongoDB para configurar una nueva cuenta de Atlas y cargar datos de muestra en una nueva implementación de MongoDB de nivel gratuito.

  • Obtenga la cadena de conexión para su clúster y guárdela para usarla más adelante en este tutorial.

  • Crea una cuenta en Vercel visitando el sitio web de Vercel.

  • Descargue Node.js versión 18 o posterior.

  • Asegúrese de tener npm y npx instalados.

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

  • Crear una aplicación Next.js.

  • Conecte MongoDB a Next.js.

  • Consulta MongoDB desde Next.js.

  • Implementa tu aplicación en Vercel.

1

Puede crear una aplicación Next.js con integración de MongoDB utilizando la plantilla de ejemplo with-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. Utilice un nombre diferente si lo prefiere.

Una vez completado el comando, navegue al directorio de su 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 la aplicación Next.js contiene un archivo env.local.example. Renómbrelo como env.local y ábralo. 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

Su conexión se ha realizado correctamente si ve el mensaje "Estáconectado a MongoDB".Si ve el mensaje "NOestá conectado a MongoDB",verifique su cadena de conexión y asegúrese de que el usuario de la base de datos y la conexión de red estén configurados correctamente.

3

Next.js admite varias maneras de recuperar datos. Puedes crear puntos finales de API, ejecutar funciones renderizadas del lado del servidor para una página o generar páginas estáticas obteniendo datos durante la compilació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 final de API que devuelve las mejores 10 películas de la base de datos sample_mflix, ordenadas por su calificación metacritic en orden descendente. El método res.json envía la matriz de películas en formato JSON al navegador. Al navegar a localhost:3000/api/movies, el navegador muestra una lista de películas devueltas desde la 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 mediante el método getServerSideProps(). Este método está disponible al usar 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.

Cree 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 su 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 navega 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 carga casi inmediatamente.

Para ejecutar su aplicación Next.js en modo de producción, primero compílela. Luego, ejecute 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, debe 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 confirmarlo en un repositorio, consulte la documentación de GitHub.

Después de enviar su código a un repositorio, navegue a Vercel e inicie sesión. En su panel de Vercel, haga clic en el botón Importar proyecto y luego haga 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 usa direcciones IP dinámicas, por lo que debe agregar una excepción para acceder a sus datos desde cualquier dirección IP en su panel de MongoDB Atlas. Para ello, vaya a la pestaña Acceso a la red, haga clic en el Add IP Address botón y, a continuación, 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:

Volver

Integrar con Prisma

En esta página