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
/ /

Integre MongoDB con Angular

En esta guía, se aprenderá a crear una aplicación web Angular que utiliza la pila MEAN. El pila MEAN es un marco para el desarrollo web que utiliza MongoDB, Express, Angular y Node.js y consta de las siguientes capas:

  • Capa de base de datos: MongoDB proporciona almacenamiento y recuperación de datos.

  • Capa de aplicación: Express y Node.js constituyen el nivel intermedio para la lógica del lado del servidor.

  • Capa de presentación: Angular implementa la interfaz de usuario y las interacciones del front-end.

Angular es un framework de TypeScript utilizado para crear aplicaciones web dinámicas. Proporciona paquetes incorporados para un rango de funcionalidades de aplicaciones, y su arquitectura basada en componentes hace que las aplicaciones sean altamente reutilizables.

Dado que TypeScript está basado en JavaScript, cada elemento de la pila MEAN se basa en JavaScript y JSON. Como resultado, la integración entre estos elementos es sencilla. El front end de Angular crea documentos JSON que MongoDB puede almacenar directamente en formato BSON, una extensión binaria de JSON, y Express proporciona un framework minimalista que usa JavaScript. MongoDB proporciona funcionalidades avanzadas de indexación y consulta para documentos BSON e incluye un driver nativo para Node.js, lo que lo convierte en un almacén de datos ideal para aplicaciones JavaScript.

Este tutorial muestra cómo crear una aplicación web con la pila MEAN. La aplicación accede a datos de muestra de restaurantes, los consulta y muestra los resultados en un sitio web alojado localmente. El tutorial también incluye instrucciones para conectarse a un clúster de MongoDB alojado en MongoDB Atlas y acceder y mostrar datos de su base de datos.

Tip

Si prefieres conectarte a MongoDB usando el driver de Node.js sin Angular, consulta el Comiencea utilizar la guía del controlador Node.js.

Siga los pasos de esta sección para instalar las dependencias del proyecto, crear un clúster de Atlas y configurar los directorios de la aplicación.

1

Para crear la aplicación Quick Start, instala el siguiente software en tu entorno de desarrollo:

Requisito previo
notas

Descarga la versión LTS más reciente o versión más reciente.

Instale globalmente ejecutando npm install -g @angular/cli en tu terminal.

Editor de código

Utilice el editor de su elección.

Aplicación de terminal y shell

Para usuarios de macOS, usen Terminal o una aplicación similar. Para usuarios de Windows, usen PowerShell.

2

MongoDB Atlas es un servicio de base de datos en la nube completamente gestionado que aloja tus implementaciones de MongoDB. Si no tienes una implementación de MongoDB, puedes crear un clúster de MongoDB de forma gratuita al completar el Tutorial de Introducción a MongoDB. El tutorial para comenzar con MongoDB también muestra cómo cargar conjuntos de datos de muestra en tu clúster, incluyendo la base de datos sample_restaurants que se usa en este tutorial.

Para conectarte a tu clúster de MongoDB, debes usar un URI de conexión. Para saber cómo recuperar tu URI de conexión, consulta la sección Agrega tu cadena de conexión del tutorial Primeros pasos de MongoDB.

Importante

Guarda tu cadena de conexión en una ubicación segura.

3

Ejecuta los siguientes comandos en tu terminal para crear un directorio para tu proyecto llamado angular-quickstart:

mkdir angular-quickstart
cd angular-quickstart

A continuación, ejecuta los siguientes comandos desde el directorio angular-quickstart para crear una carpeta para el back end llamada server e inicializar el archivo package.json:

mkdir server
cd server
npm init -y
4

Navega al archivo package.json en el directorio angular-quickstart/server. Para utilizar módulos ECMAScript, el formato estándar para empaquetar código JavaScript reutilizable, sustituya la línea existente que especifica el campo "type" por la siguiente línea:

"type": "module",
5

Ejecuta el siguiente comando para instalar las dependencias mongodb, express, cors y dotenv:

npm install mongodb express cors dotenv

Este comando instala MongoDB, el framework web Express, el paquete cors Node.js para el uso compartido de recursos entre orígenes y Dotenv para cargar variables de entorno.

A continuación, ejecute el siguiente comando para instalar TypeScript y las definiciones de tipos requeridas:

npm install -D typescript @types/node @types/cors @types/express tsx

Este comando instala TypeScript, definiciones de tipos para Node.js y Express, y tsx, una herramienta para ejecutar archivos TypeScript directamente.

Después de configurar la estructura del proyecto y las dependencias, sigue los pasos en esta sección para configurar tu servidor web y conectarte a MongoDB.

1

Crea un archivo llamado server.ts en tu directorio angular-quickstart/server y pega el siguiente código:

angular-quickstart/servidor/servidor.ts
import express from "express";
import cors from "cors";
import restaurants from "./routes/restaurant.js";
const PORT = process.env.PORT || 5050;
const app = express();
app.use(cors());
app.use(express.json());
app.use("/restaurant", restaurants);
// start the Express server
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}`);
});
2

En el directorio server, cree un archivo .env y pegue el siguiente código:

MONGODB_URI=<connection string>
PORT=5050

Reemplace el <connection string> marcador de posición con la cadena de conexión que guardó en un paso anterior.

3

En el directorio server, crea un subdirectorio llamado db. Agregue un nuevo archivo llamado connection.ts a este subdirectorio y pegue el siguiente código:

inicio rápido angular/servidor/db/conexión.ts
import "dotenv/config";
import { MongoClient, Db } from "mongodb";
const uri = process.env.MONGODB_URI || "";
const client = new MongoClient(uri);
try {
// Connects the client to the server
await client.connect();
// Sends a ping to confirm a successful connection
await client.db("admin").command({ ping: 1 });
console.log(
"Pinged your deployment. You successfully connected to MongoDB!"
);
} catch(err) {
console.error(err);
}
const db: Db = client.db("sample_restaurants");
export default db;

Este archivo se conecta a tu implementación de MongoDB, accede a la base de datos sample_restaurants y pone a prueba la conexión a la base de datos.

4

En el directorio server, crea un subdirectorio llamado routes. Cree un archivo llamado restaurant.ts en este subdirectorio y pegue el siguiente código:

inicio rápido angular/servidor/rutas/restaurante.ts
import express, { Request, Response } from "express";
import db from "../db/connection.js";
// Creates an instance of the Express router, used to define our routes
const router = express.Router();
// Gets a list of all the restaurants
router.get("/", async (req: Request, res: Response) => {
let collection = db.collection("restaurants");
let results = await collection.find({}).toArray();
res.send(results).status(200);
});
// Lists restaurants that match the query filter
router.get("/browse", async (req: Request, res: Response) => {
try {
let collection = db.collection("restaurants");
let query = {
borough: "Queens",
name: { $regex: "Moon", $options: "i" },
};
let results = await collection.find(query).toArray();
res.send(results).status(200);
} catch (err) {
console.error(err);
res.status(500).send("Error browsing restaurants");
}
});
export default router;

Este archivo accede a la colección restaurants en la base de datos sample_restaurants y define los siguientes endpoints GET:

  • /: Recupera todos los restaurantes de la colección de muestras

  • /browse: Recupera restaurantes que cumplen los criterios de la query, la cual filtra los restaurantes de Queens que contienen la palabra "Moon" en el nombre

Después de configurar el backend de la aplicación, sigue los pasos de esta sección para configurar Angular y agregar los componentes del frontend.

1

Navega al directorio angular-quickstart y ejecuta el siguiente comando para crear una nueva aplicación Angular:

ng new client

Este comando le solicita que responda a una serie de preguntas de configuración. Para cada pregunta, elija las siguientes respuestas:

  • ¿Qué sistema de hoja de estilos te gustaría usar? Selecciona Tailwind CSS

  • ¿Deseas habilitar la Renderización del lado del servidor (SSR) y la Generación de sitios estáticos (SSG/Prerendering)? Introduzca N

  • ¿Qué herramientas de IA quieres configurar con las mejores prácticas Angular? Selecciona las herramientas de tu elección

Tras ejecutar el comando, su proyecto tendrá un directorio client que contiene el andamiaje frontend. El comando también configura su proyecto para usar TailwindCSS, un framework para el formato de interfaz de usuario.

2

Ejecute los siguientes comandos desde el directorio raíz de su proyecto para instalar Zone.js:

cd client
npm install zone.js

Su aplicación utiliza la biblioteca Zone.js para rastrear cambios y actualizar automáticamente la interfaz de usuario.

3

Desde el directorio client, ejecute el siguiente comando para generar un servicio que maneje las llamadas API a su back end:

ng generate service restaurant

Navega al archivo client/src/app/restaurant.ts y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/aplicación/restaurant.ts
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
export interface Restaurant {
_id: string;
name: string;
borough: string;
cuisine: string;
}
@Injectable({
providedIn: 'root'
})
export class RestaurantService {
private apiUrl = 'http://localhost:5050/restaurant';
constructor(private http: HttpClient) {}
getAllRestaurants(): Observable<Restaurant[]> {
return this.http.get<Restaurant[]>(this.apiUrl);
}
getFilteredRestaurants(): Observable<Restaurant[]> {
return this.http.get<Restaurant[]>(`${this.apiUrl}/browse`);
}
}

Este servicio define métodos para obtener datos del restaurante desde tu API Express.

4

Navega al archivo client/src/app/app.routes.ts y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/aplicación/aplicación.routes.ts
import { Routes } from '@angular/router';
import { RestaurantListComponent } from './restaurant-list/restaurant-list';
export const routes: Routes = [
{ path: '', component: RestaurantListComponent },
{ path: 'browse', component: RestaurantListComponent }
];

Este archivo configura el enrutamiento del lado del cliente y define las siguientes rutas:

  • /: Muestra todos los restaurantes desde el punto final de la API /restaurant/

  • /browseMuestra restaurantes filtrados del punto final de API /restaurant/browse

5

Navega al archivo client/src/app/app.config.ts y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/aplicación/aplicación.config.ts
import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core';
import { provideRouter } from '@angular/router';
import { provideHttpClient } from '@angular/common/http';
import { routes } from './app.routes';
export const appConfig: ApplicationConfig = {
providers: [
provideZoneChangeDetection({ eventCoalescing: true }),
provideRouter(routes),
provideHttpClient()
]
};

Esta configuración habilita la funcionalidad del cliente HTTP para realizar solicitudes API.

6

Ejecute el siguiente comando desde el directorio client para generar un componente para mostrar restaurantes:

ng generate component restaurant-list

Navega al archivo client/src/app/restaurant-list/restaurant-list.ts y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/app/lista-de-restaurantes/lista-de-restaurantes.ts
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { Router } from '@angular/router';
import { RestaurantService, Restaurant } from '../restaurant';
@Component({
selector: 'app-restaurant-list',
standalone: true,
imports: [CommonModule],
templateUrl: './restaurant-list.html',
styleUrl: './restaurant-list.css'
})
export class RestaurantListComponent implements OnInit {
restaurants: Restaurant[] = [];
loading = true;
error = '';
constructor(
private restaurantService: RestaurantService,
public router: Router
) {}
ngOnInit(): void {
this.loadRestaurants();
}
loadRestaurants(): void {
const isFiltered = this.router.url === '/browse';
const observable = isFiltered
? this.restaurantService.getFilteredRestaurants()
: this.restaurantService.getAllRestaurants();
observable.subscribe({
next: (data) => {
this.restaurants = data;
this.loading = false;
},
error: (err) => {
this.error = 'Failed to load restaurants';
this.loading = false;
console.error('Error loading restaurants:', err);
}
});
}
}

A continuación, ve al archivo client/src/app/restaurant-list/restaurant-list.html y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/app/restaurant-list/restaurant-list.html
<div *ngIf="loading" class="text-center py-8">
<p class="text-gray-600">Loading restaurants...</p>
</div>
<div *ngIf="error" class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded">
{{ error }}
</div>
<div *ngIf="!loading && !error">
<h3 class="text-lg font-semibold p-4">
{{ router.url === '/browse' ? 'Filtered Restaurants (Queens, containing "Moon")' : 'All Restaurants' }}
</h3>
<div class="border rounded-lg overflow-hidden">
<div class="relative w-full overflow-auto">
<table class="w-full caption-bottom text-sm">
<thead class="[&_tr]:border-b">
<tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted">
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Name
</th>
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Borough
</th>
<th class="h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0">
Cuisine
</th>
</tr>
</thead>
<tbody class="[&_tr:last-child]:border-0">
@for (restaurant of restaurants; track restaurant._id) {
<tr class="border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted">
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.name }}
</td>
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.borough }}
</td>
<td class="p-4 align-middle [&:has([role=checkbox])]:pr-0">
{{ restaurant.cuisine }}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>

Este componente recupera y muestra la información del restaurante según la ruta actual.

7

Navega al archivo client/src/app/app.ts y reemplaza el contenido con el siguiente código:

angular-quickstart/cliente/src/app/aplicación.ts
import { Component } from '@angular/core';
import { RouterOutlet, RouterLink, RouterLinkActive } from '@angular/router';
@Component({
selector: 'app-root',
standalone: true,
imports: [RouterOutlet, RouterLink, RouterLinkActive],
templateUrl: './app.html',
styleUrl: './app.css'
})
export class AppComponent {
title = 'Restaurant Browser';
}

A continuación, ve al archivo client/src/app/app.html y reemplaza el contenido con el siguiente código:

angular-quickstart/client/src/app/app.html
<div class="w-full p-6">
<nav class="flex justify-between items-center mb-6">
<a routerLink="/">
<img
alt="MongoDB logo"
class="h-10 inline"
src="https://d3cy9zhslanhfa.cloudfront.net/media/3800C044-6298-4575-A05D5C6B7623EE37/4B45D0EC-3482-4759-82DA37D8EA07D229/webimage-8A27671A-8A53-45DC-89D7BF8537F15A0D.png"
/>
</a>
<div class="flex gap-4">
<a routerLink="/" routerLinkActive="font-bold" [routerLinkActiveOptions]="{exact: true}" class="text-blue-600 hover:underline">
All Restaurants
</a>
<a routerLink="/browse" routerLinkActive="font-bold" class="text-blue-600 hover:underline">
Filtered Restaurants
</a>
</div>
</nav>
<router-outlet></router-outlet>
</div>

Este es el componente principal de la aplicación que incluye la navegación y representa los componentes secundarios apropiados en función de la ruta actual.

8

Navega al archivo client/src/main.ts y reemplaza el contenido con el siguiente código:

inicio rápido angular/cliente/src/main.ts
import 'zone.js';
import { bootstrapApplication } from '@angular/platform-browser';
import { appConfig } from './app/app.config';
import { AppComponent } from './app/app';
bootstrapApplication(AppComponent, appConfig)
.catch((err) => console.error(err));

Este archivo actúa como el punto de entrada de tu aplicación, y aplica y renderiza tu configuración.

Por último, sigue los pasos de esta sección para ejecutar la aplicación y ver los datos del restaurante renderizados.

1

Desde tu directorio server, ejecuta el siguiente comando para iniciar el servidor:

npx tsx server.ts

Si es exitoso, este comando muestra la siguiente información:

Pinged your deployment. You successfully connected to MongoDB!
Server listening on port 5050
2

En una ventana de terminal aparte, dirígete al directorio client. Ejecuta el siguiente comando para iniciar el frontend de Angular:

ng serve

Si es exitoso, este comando muestra la siguiente información:

Application bundle generation complete.
Watch mode enabled. Watching for file changes...
NOTE: Raw file sizes do not reflect development server per-request transformations.
➜ Local: http://localhost:4200/
➜ press h + enter to show help

Su aplicación Angular realiza solicitudes HTTP desde el puerto 4200 al puerto 5050 para recuperar datos.

3

Abra la URL http://localhost:4200 /. La página de destino inicial muestra una lista de todos los restaurantes de la sample_restaurants.restaurants colección:

La página de inicio que muestra todos los restaurantes

Luego, haga clic en el Filtered Restaurants Enlace en la barra de navegación para ver los restaurantes que coinciden con la consulta de los campos name y borough:

La página web que muestra los restaurantes coincidentes

¡Felicidades por completar el tutorial de inicio rápido!

Después de completar estos pasos, tendrá una aplicación web Angular que se conecta a su implementación de MongoDB, ejecuta una consulta en datos de muestra del restaurante y presenta los resultados en un sitio web alojado localmente.

Para obtener más información sobre Angular, MongoDB y la pila MEAN, consulte los siguientes recursos:

Volver

Problemas y Ayuda

En esta página