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

Integrar MongoDB com Angular

Neste guia, você pode aprender como criar um aplicativo da web Angular que usa a pilha MEAN. A pilha MEAN é uma estrutura de desenvolvimento web que usa MongoDB, Express, Angular e Node.js e consiste nas seguintes camadas:

  • Camada de banco de dados: o MongoDB fornece armazenamento e recuperação de dados.

  • Camada de aplicativos: Express e Node.js compõem o nível intermediário da lógica do lado do servidor.

  • Camada de apresentação: o Angular implementa a interface do usuário e as interações de front-end.

Angular é uma estrutura TypeScript usada para criar aplicativos web dinâmicos. Ele fornece pacotes integrados para uma variedade de recursos de aplicativo, e sua arquitetura baseada em componentes torna os aplicativos altamente reutilizáveis.

Como o TypeScript é baseado em JavaScript, cada elemento da pilha MEAN é baseado em JavaScript e JSON. Como resultado, a integração entre estes elementos é simples. O front-end Angular cria documentos JSON que o MongoDB pode armazenar diretamente no formato BSON, uma extensão JSON binária, e o Express fornece uma framework mínima que usa JavaScript. O MongoDB oferece recursos avançados de indexação e query para documentos BSON e inclui um driver nativo para Node.js , o que o torna o armazenamento de dados ideal para aplicativos JavaScript.

Este tutorial mostra como criar um aplicativo da web usando a pilha MEAN. O aplicativo acessa dados de restaurantes de amostra, queries os dados e exibe os resultados em um site hospedado localmente. O tutorial também inclui instruções para se conectar a um cluster MongoDB hospedado no MongoDB Atlas e acessar e exibir dados de seu banco de dados.

Dica

Se você preferir se conectar ao MongoDB usando o driver Node.js sem o Angular, consulte o guia Introdução ao driver Node.js.

Siga as etapas nesta seção para instalar as dependências do projeto, criar um cluster do Atlas e configurar os diretórios do aplicativo.

1

Para criar o aplicativo Quick Start, instale o seguinte software em seu ambiente de desenvolvimento:

Pré-requisitos
Notas

Baixe a versão LTS mais recente ou a versão mais recente.

Instale globalmente executando o npm install -g @angular/cli em seu terminal.

Editor de código

Use o editor de sua escolha.

Aplicativo de terminal e shell

Para usuários do MacOS, use o Terminal ou um aplicativo semelhante. Para usuários do Windows, use o PowerShell.

2

O MongoDB Atlas é um serviço de banco de dados em nuvem totalmente gerenciado que hospeda suas implantações do MongoDB. Se você não tiver uma implementação do MongoDB, poderá criar um cluster do MongoDB gratuitamente concluindo o tutorial de Introdução ao MongoDB. O tutorial de Introdução ao MongoDB também demonstra como carregar conjuntos de dados de exemplo em seu cluster, incluindo o banco de dados sample_restaurants usado neste tutorial.

Para se conectar ao cluster MongoDB, você deve usar um URI de conexão. Para aprender como recuperar seu URI de conexão, veja a seção Adicionar sua string de conexão do tutorial de Introdução ao MongoDB.

Importante

Salve sua string de conexão em um local seguro.

3

Execute os seguintes comandos no seu terminal para criar um diretório para seu projeto denominado angular-quickstart:

mkdir angular-quickstart
cd angular-quickstart

Em seguida, execute os seguintes comandos a partir do diretório angular-quickstart para criar uma pasta para o backend denominada server e inicializar o arquivo package.json:

mkdir server
cd server
npm init -y
4

Navegue até o arquivo package.json no diretório angular-quickstart/server. Para usar os módulos ECMAScript, o formato padrão para empacotar código JavaScript para reutilização, substitua a linha existente que especifica o campo "type" pela seguinte linha:

"type": "module",
5

Execute o seguinte comando para instalar as dependências mongodb, express, cors e dotenv:

npm install mongodb express cors dotenv

Este comando instala o MongoDB, o framework web Express, o pacote cors Node.js para compartilhamento de recursos entre origens e Dotenv para carregar variáveis de ambiente.

Em seguida, execute o seguinte comando para instalar o TypeScript e as definições de tipo necessárias:

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

Este comando instala o TypeScript, definições de tipo para Node.js e Express, e tsx, uma ferramenta para executar arquivos TypeScript diretamente.

Após configurar a estrutura e as dependências do projeto, siga as etapas desta seção para configurar seu servidor da web e conectar-se ao MongoDB.

1

Crie um arquivo denominado server.ts no seu diretório angular-quickstart/server e cole o seguinte código:

ângulo-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

No diretório server, crie um arquivo .env e cole o seguinte código:

MONGODB_URI=<connection string>
PORT=5050

Substitua o placeholder <connection string> pela string de conexão que você salvou em uma etapa anterior.

3

No diretório server, crie um subdiretório denominado db. Adicione um novo arquivo denominado connection.ts a este subdiretório e cole o seguinte código:

ângulo-quickstart/ servidor/db/connection.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;

Esse arquivo se conecta à sua implantação do MongoDB, acessa o banco de dados sample_restaurants e testa a conexão com o banco de dados.

4

No diretório server, crie um subdiretório denominado routes. Crie um arquivo denominado restaurant.ts neste subdiretório e cole o seguinte código:

ângulo-quickstart/ servidor/routes/restaurant.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 arquivo acessa a coleção restaurants no banco de dados do sample_restaurants e define os seguintes pontos de extremidade do GET:

  • /: recupera todos os restaurantes da coleção de amostras

  • /browse: recupera restaurantes que correspondem aos critérios de query, que aplica um filtro para restaurantes em Queens que contêm a palavra "Moon" no nome

Depois de configurar o backend do aplicativo, siga as etapas nesta seção para configurar o Angular e adicionar os componentes de frontend.

1

Navegue até o diretório angular-quickstart e execute o seguinte comando para criar um novo aplicativo Angular:

ng new client

Este comando solicita que você responda a uma série de perguntas de configuração. Para cada pergunta, escolha as seguintes respostas:

  • Qual sistema de folha de estilo você gostaria de usar? Selecionar CSS do Tailwind

  • Deseja ativar a renderização do lado do servidor (SSR) e a geração de sites estáticos (SSG/Prerendering)?Insira N

  • Quais ferramentas de IA você deseja configurar com as práticas recomendadas do Angular? Selecione as ferramentas de sua escolha

Após executar o comando, seu projeto tem um diretório client que contém andaime front-end. O comando também configura seu projeto para usar o TailwindCSS, uma framework para formatação da IU.

2

Execute os seguintes comandos a partir do diretório raiz do seu projeto para instalar o Zone.js:

cd client
npm install zone.js

Seu aplicativo usa a biblioteca zona.js para rastrear alterações e atualizar automaticamente a IU.

3

No diretório client, execute o seguinte comando para gerar um serviço que lida com chamadas de API para seu backend:

ng generate service restaurant

Navegue até o arquivo client/src/app/restaurant.ts e substitua o conteúdo pelo seguinte código:

angular-quickstart/ cliente/src/aplicativo/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 serviço define métodos para buscar dados de restaurantes de sua API Express.

4

Navegue até o arquivo client/src/app/app.routes.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ cliente/src/app/app.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 arquivo configura o roteamento do lado do cliente e define as seguintes rotas:

  • /: exibe todos os restaurantes do ponto de extremidade da API /restaurant/

  • /browse: exibe restaurantes filtrados do ponto de extremidade da API /restaurant/browse

5

Navegue até o arquivo client/src/app/app.config.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ aplicativo/src/aplicativo/aplicativo.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 configuração ativa a funcionalidade do cliente HTTP para fazer solicitações de API.

6

Execute o seguinte comando a partir do diretório client para gerar um componente para exibir restaurantes:

ng generate component restaurant-list

Navegue até o arquivo client/src/app/restaurant-list/restaurant-list.ts e substitua o conteúdo pelo seguinte código:

angular-quickstart/cliente/src/aplicativo/restaurant-list/restaurant-list.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);
}
});
}
}

Em seguida, navegue até o arquivo client/src/app/restaurant-list/restaurant-list.html e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ aplicativo/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 e exibe as informações do restaurante com base na rota atual.

7

Navegue até o arquivo client/src/app/app.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ cliente/src/aplicativo/aplicativo.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';
}

Em seguida, navegue até o arquivo client/src/app/app.html e substitua o conteúdo pelo seguinte 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 é o principal componente do aplicativo que inclui navegação e renderiza os componentes secundários apropriados com base na rota atual.

8

Navegue até o arquivo client/src/main.ts e substitua o conteúdo pelo seguinte código:

ângulo-quickstart/ 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 arquivo atua como o ponto de entrada para seu aplicativo, aplicando e renderizando sua configuração.

Por fim, siga as etapas nesta seção para executar seu aplicativo e visualizar os dados renderizados do restaurante.

1

No diretório server, execute o seguinte comando para iniciar o servidor:

npx tsx server.ts

Se bem-sucedido, este comando gera as seguintes informações:

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

Em uma janela de terminal separada, navegue até o diretório client. Execute o seguinte comando para iniciar o frontend do Angular:

ng serve

Se bem-sucedido, este comando gera as seguintes informações:

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

Seu aplicativo Angular faz solicitações HTTP da porta 4200 para a porta 5050 para recuperar dados.

3

Abra o http://localhost:4200/ URL. A página de destino inicial exibe uma lista de todos os restaurantes na coleção sample_restaurants.restaurants:

A página de destino que exibe todos os restaurantes

Em seguida, clique no link Filtered Restaurants na barra de navegação para visualizar os restaurantes que correspondem à query de campo name e borough:

A página web que exibe os restaurantes correspondentes

Parabéns por concluir o tutorial de início rápido!

Depois de concluir essas etapas, você tem um aplicativo web Angular que se conecta à implantação do MongoDB, executa uma query em dados de restaurante de amostra e renderiza os resultados em um website hospedado localmente.

Para saber mais sobre Angular, MongoDB e a pilha MEAN, consulte os seguintes recursos:

Voltar

Problemas e ajuda

Nesta página