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, complete los siguientes pasos:

Este tutorial le guiará a través de los siguientes pasos:

  • Crear una aplicación Next.js.

  • Conecte MongoDB a Next.js.

  • Consulta MongoDB desde Next.js.

  • Implemente su 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 de MongoDB, ejecute el siguiente comando en su 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. Use un nombre diferente si lo prefiere.

Una vez completado el comando, navegue al directorio de su proyecto ejecutando el siguiente comando:

cd sample_mflix

Instale las dependencias de npm ejecutando el siguiente comando:

npm install

Para iniciar su aplicación Next.js, ejecute 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 ha proporcionado su 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.

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

MONGODB_URI=<Your connection string>

Para verificar su configuración, reinicie su aplicación Next.js ejecutando el siguiente comando en su terminal:

npm run dev

Cuando se compile la aplicación, ve a localhost:3000 en tu navegador. Verás la página de bienvenida de la aplicación Next.js con mongodb.

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 punto final de API, cree un directorio api en su directorio pages. Cada archivo que cree en el directorio api se convierte en un punto final de API individual.

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

Agregue más rutas 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() fuerza a una página de Next.js a usar la representació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 mediante props. El código dentro de getServerSideProps() nunca se envía al cliente.

Cree un nuevo archivo 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 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 de la película principal, 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 sus datos no cambian con frecuencia, utilice la generación de páginas estáticas.

Puedes usar la generación de páginas estáticas para pre-renderizar las páginas durante la compilación. Este método es útil cuando los 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

Al ejecutar el comando npm run start, Next.js sirve la aplicación en modo de producción. El método getStaticProps() no se ejecuta cada vez que se accede a la ruta /top, ya que Next.js sirve la página estáticamente. Para ver la página estática pre-renderizada, consulte 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 env.local archivo.

Haz clic en el botón Implementar. Vercel compilará e implementará automáticamente tu aplicación Next.js. Al finalizar, recibirás una URL para acceder a ella.

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 obtener más información sobre los conceptos de este tutorial, consulte los siguientes recursos:

Volver

Integrar con Prisma

En esta página