{"id":2271,"date":"2026-08-03T17:48:23","date_gmt":"2026-08-03T20:48:23","guid":{"rendered":"https:\/\/desvendandoocodigo.com.br\/?p=2271"},"modified":"2026-08-03T17:52:39","modified_gmt":"2026-08-03T20:52:39","slug":"mongodb-com-node-js-na-pratica-criando-uma-api-crud-completa-com-express","status":"publish","type":"post","link":"https:\/\/desvendandoocodigo.com.br\/?p=2271","title":{"rendered":"MongoDB com Node.js na Pr\u00e1tica | Criando uma API CRUD Completa com Express"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Se voc\u00ea est\u00e1 aprendendo <strong>Node.js<\/strong> e deseja criar aplica\u00e7\u00f5es profissionais, em algum momento precisar\u00e1 armazenar dados em um banco de dados. Uma das combina\u00e7\u00f5es mais utilizadas no mercado \u00e9 <strong>Node.js + Express + MongoDB + Mongoose<\/strong>, permitindo desenvolver APIs REST modernas, r\u00e1pidas e escal\u00e1veis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Neste artigo voc\u00ea aprender\u00e1 como conectar uma aplica\u00e7\u00e3o Node.js ao MongoDB, criar uma API REST completa utilizando Express e implementar todas as opera\u00e7\u00f5es do CRUD (Create, Read, Update e Delete) utilizando o Mongoose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao final, voc\u00ea ter\u00e1 uma estrutura semelhante \u00e0 utilizada em projetos reais.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Assista \u00e0 aula completa<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Antes de come\u00e7ar, voc\u00ea tamb\u00e9m pode acompanhar a aula pr\u00e1tica no YouTube, onde todo o projeto \u00e9 desenvolvido passo a passo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>V\u00eddeo:<\/strong> MongoDB com Node.js na Pr\u00e1tica | Criando uma API CRUD Completa com Express<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"MongoDB com Node.js na Pr\u00e1tica | Criando uma API CRUD Completa com Express\" width=\"960\" height=\"540\" src=\"https:\/\/www.youtube.com\/embed\/a3mXMHjpE5Y?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">O que \u00e9 o MongoDB?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O MongoDB \u00e9 um banco de dados <strong>NoSQL orientado a documentos<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao contr\u00e1rio dos bancos relacionais tradicionais, como MySQL ou PostgreSQL, ele n\u00e3o trabalha com tabelas e linhas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Os dados s\u00e3o armazenados em documentos no formato semelhante ao JSON.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"nome\": \"Notebook\",\n    \"preco\": 3500,\n    \"estoque\": 12\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Essa estrutura oferece maior flexibilidade para armazenar informa\u00e7\u00f5es sem precisar alterar tabelas sempre que novos campos forem adicionados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">O que \u00e9 o Mongoose?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O Mongoose \u00e9 uma biblioteca para Node.js respons\u00e1vel por facilitar a comunica\u00e7\u00e3o entre a aplica\u00e7\u00e3o e o MongoDB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com ele podemos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>criar Schemas;<\/li>\n\n\n\n<li>definir Models;<\/li>\n\n\n\n<li>validar dados;<\/li>\n\n\n\n<li>consultar documentos;<\/li>\n\n\n\n<li>atualizar registros;<\/li>\n\n\n\n<li>excluir documentos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Na pr\u00e1tica, o Mongoose funciona como uma camada entre sua aplica\u00e7\u00e3o e o banco de dados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Tecnologias utilizadas<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Neste projeto utilizamos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JavaScript<\/li>\n\n\n\n<li>Node.js<\/li>\n\n\n\n<li>Express.js<\/li>\n\n\n\n<li>MongoDB<\/li>\n\n\n\n<li>Mongoose<\/li>\n\n\n\n<li>Thunder Client<\/li>\n\n\n\n<li>MongoDB Compass<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Estrutura do projeto<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Uma boa organiza\u00e7\u00e3o facilita a manuten\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nossa estrutura fica semelhante a esta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>projeto\/\n\ncontrollers\/\nprodutoController.js\n\nmodels\/\nProduto.js\n\nroutes\/\nprodutoRoutes.js\n\nconfig\/\ndatabase.js\n\nserver.js\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Separar responsabilidades deixa o c\u00f3digo mais organizado e facilita futuras evolu\u00e7\u00f5es.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Instalando as depend\u00eancias<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Primeiro inicialize o projeto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm init -y\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Depois instale as bibliotecas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install express mongoose\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Caso utilize atualiza\u00e7\u00e3o autom\u00e1tica do servidor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install --save-dev nodemon\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando a conex\u00e3o com o MongoDB<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s instalar as depend\u00eancias, criamos a conex\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mongoose.connect(\"mongodb:\/\/localhost:27017\/produtos\");\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Uma curiosidade interessante \u00e9 que o MongoDB cria o banco automaticamente quando os primeiros dados s\u00e3o gravados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ou seja, n\u00e3o \u00e9 necess\u00e1rio criar o banco manualmente antes de utilizar.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando o Schema<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O Schema define quais informa\u00e7\u00f5es ser\u00e3o armazenadas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const ProdutoSchema = new mongoose.Schema({\n\n    nome: String,\n\n    preco: Number,\n\n    estoque: Number\n\n});\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ele funciona como um &#8220;modelo&#8221; para todos os documentos daquela cole\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando o Model<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s definir o Schema, criamos o Model.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const Produto = mongoose.model(\"Produto\", ProdutoSchema);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 atrav\u00e9s do Model que realizamos todas as opera\u00e7\u00f5es no banco.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando o Controller<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">O Controller concentra toda a l\u00f3gica da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>cadastrar produtos;<\/li>\n\n\n\n<li>listar produtos;<\/li>\n\n\n\n<li>buscar por ID;<\/li>\n\n\n\n<li>atualizar registros;<\/li>\n\n\n\n<li>excluir documentos.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Essa separa\u00e7\u00e3o torna o projeto muito mais organizado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Criando as rotas<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As rotas s\u00e3o respons\u00e1veis por receber as requisi\u00e7\u00f5es HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET\nPOST\nPUT\nDELETE\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cada rota chama um m\u00e9todo do Controller correspondente.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Opera\u00e7\u00f5es do CRUD<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">CREATE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Insere novos documentos no banco.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>POST \/produtos\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">READ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lista todos os produtos cadastrados.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/produtos\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m podemos buscar um documento espec\u00edfico:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/produtos\/:id\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">UPDATE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Atualiza um documento existente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PUT \/produtos\/:id\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">O Mongoose localiza o documento e altera apenas os campos informados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">DELETE<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Remove um documento do banco.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>DELETE \/produtos\/:id\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ap\u00f3s a exclus\u00e3o, o documento deixa de existir na cole\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Testando a API<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Durante o desenvolvimento utilizamos o <strong>Thunder Client<\/strong>, uma extens\u00e3o do Visual Studio Code que permite enviar requisi\u00e7\u00f5es HTTP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Com ela podemos testar facilmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GET<\/li>\n\n\n\n<li>POST<\/li>\n\n\n\n<li>PUT<\/li>\n\n\n\n<li>DELETE<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sem precisar criar um frontend.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Visualizando os dados<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Enquanto enviamos requisi\u00e7\u00f5es pelo Thunder Client, podemos acompanhar os documentos sendo criados no <strong>MongoDB Compass<\/strong>, interface gr\u00e1fica oficial do MongoDB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Isso facilita muito o aprendizado e a depura\u00e7\u00e3o da aplica\u00e7\u00e3o.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Vantagens dessa arquitetura<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Separar a aplica\u00e7\u00e3o em:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Models<\/li>\n\n\n\n<li>Controllers<\/li>\n\n\n\n<li>Routes<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">permite:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>c\u00f3digo organizado;<\/li>\n\n\n\n<li>manuten\u00e7\u00e3o mais simples;<\/li>\n\n\n\n<li>reutiliza\u00e7\u00e3o de l\u00f3gica;<\/li>\n\n\n\n<li>facilidade para trabalhar em equipe;<\/li>\n\n\n\n<li>crescimento do projeto.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Essa estrutura \u00e9 utilizada em in\u00fameros projetos profissionais.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Principais d\u00favidas de quem est\u00e1 come\u00e7ando<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">O MongoDB cria o banco automaticamente?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sim. O banco e a cole\u00e7\u00e3o s\u00e3o criados quando os primeiros documentos s\u00e3o gravados.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Preciso criar tabelas?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O MongoDB utiliza cole\u00e7\u00f5es e documentos.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">O Mongoose \u00e9 obrigat\u00f3rio?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel utilizar o driver oficial do MongoDB.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por\u00e9m, o Mongoose facilita bastante o desenvolvimento e \u00e9 amplamente utilizado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Posso utilizar MongoDB em aplica\u00e7\u00f5es grandes?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Empresas de todos os tamanhos utilizam MongoDB em produ\u00e7\u00e3o devido \u00e0 sua flexibilidade e escalabilidade.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Pr\u00f3ximos passos<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Depois de aprender CRUD com MongoDB, voc\u00ea pode evoluir para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>autentica\u00e7\u00e3o com JWT;<\/li>\n\n\n\n<li>upload de imagens;<\/li>\n\n\n\n<li>valida\u00e7\u00f5es avan\u00e7adas;<\/li>\n\n\n\n<li>relacionamento entre cole\u00e7\u00f5es;<\/li>\n\n\n\n<li>pagina\u00e7\u00e3o;<\/li>\n\n\n\n<li>filtros;<\/li>\n\n\n\n<li>deploy da API.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Esses assuntos s\u00e3o fundamentais para desenvolver aplica\u00e7\u00f5es completas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Conclus\u00e3o<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Neste projeto voc\u00ea aprendeu como criar uma API REST utilizando <strong>Node.js<\/strong>, <strong>Express<\/strong>, <strong>MongoDB<\/strong> e <strong>Mongoose<\/strong>, implementando todas as opera\u00e7\u00f5es do CRUD em uma estrutura organizada e pr\u00f3xima da utilizada em aplica\u00e7\u00f5es reais.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esse conhecimento serve como base para praticamente qualquer sistema backend desenvolvido com JavaScript.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea gostou deste conte\u00fado, continue acompanhando a s\u00e9rie de Backend aqui no blog e no canal <strong>Desvendando o C\u00f3digo<\/strong>, onde publicamos novos projetos pr\u00e1ticos todas as semanas.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Continue aprendendo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u27a1\ufe0f Assista \u00e0 live completa deste projeto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u27a1\ufe0f Veja tamb\u00e9m os artigos sobre Express.js, APIs REST, Node.js e JavaScript dispon\u00edveis aqui no blog.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u27a1\ufe0f Inscreva-se no canal <strong>Desvendando o C\u00f3digo<\/strong> para acompanhar novos projetos pr\u00e1ticos de desenvolvimento Full Stack.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Se voc\u00ea est\u00e1 aprendendo Node.js e deseja criar aplica\u00e7\u00f5es profissionais, em algum momento precisar\u00e1 armazenar dados em um banco de dados. Uma das combina\u00e7\u00f5es mais utilizadas no mercado \u00e9 Node.js + Express + MongoDB + Mongoose, permitindo desenvolver APIs REST modernas, r\u00e1pidas e escal\u00e1veis. Neste artigo voc\u00ea aprender\u00e1 como conectar uma aplica\u00e7\u00e3o Node.js ao MongoDB, criar uma API REST completa utilizando Express e implementar todas as opera\u00e7\u00f5es do CRUD (Create, Read, Update e Delete) utilizando o Mongoose. Ao final, voc\u00ea ter\u00e1 uma estrutura semelhante \u00e0 utilizada em projetos reais. Assista \u00e0 aula completa Antes de come\u00e7ar, voc\u00ea tamb\u00e9m pode acompanhar a aula pr\u00e1tica no YouTube, onde todo o projeto \u00e9 desenvolvido passo a passo. V\u00eddeo: MongoDB com Node.js na Pr\u00e1tica | Criando uma API CRUD Completa com Express O que \u00e9 o MongoDB? O MongoDB \u00e9 um banco de dados NoSQL orientado a documentos. Ao contr\u00e1rio dos bancos relacionais tradicionais, como MySQL ou PostgreSQL, ele n\u00e3o trabalha com tabelas e linhas. Os dados s\u00e3o armazenados em documentos no formato semelhante ao JSON. Exemplo: Essa estrutura oferece maior flexibilidade para armazenar informa\u00e7\u00f5es sem precisar alterar tabelas sempre que novos campos forem adicionados. O que \u00e9 o Mongoose? O Mongoose \u00e9 uma biblioteca para Node.js respons\u00e1vel por facilitar a comunica\u00e7\u00e3o entre a aplica\u00e7\u00e3o e o MongoDB. Com ele podemos: Na pr\u00e1tica, o Mongoose funciona como uma camada entre sua aplica\u00e7\u00e3o e o banco de dados. Tecnologias utilizadas Neste projeto utilizamos: Estrutura do projeto Uma boa organiza\u00e7\u00e3o facilita a manuten\u00e7\u00e3o da aplica\u00e7\u00e3o. Nossa estrutura fica semelhante a esta: Separar responsabilidades deixa o c\u00f3digo mais organizado e facilita futuras evolu\u00e7\u00f5es. Instalando as depend\u00eancias Primeiro inicialize o projeto: Depois instale as bibliotecas: Caso utilize atualiza\u00e7\u00e3o autom\u00e1tica do servidor: Criando a conex\u00e3o com o MongoDB Ap\u00f3s instalar as depend\u00eancias, criamos a conex\u00e3o. Exemplo: Uma curiosidade interessante \u00e9 que o MongoDB cria o banco automaticamente quando os primeiros dados s\u00e3o gravados. Ou seja, n\u00e3o \u00e9 necess\u00e1rio criar o banco manualmente antes de utilizar. Criando o Schema O Schema define quais informa\u00e7\u00f5es ser\u00e3o armazenadas. Exemplo: Ele funciona como um &#8220;modelo&#8221; para todos os documentos daquela cole\u00e7\u00e3o. Criando o Model Ap\u00f3s definir o Schema, criamos o Model. \u00c9 atrav\u00e9s do Model que realizamos todas as opera\u00e7\u00f5es no banco. Criando o Controller O Controller concentra toda a l\u00f3gica da aplica\u00e7\u00e3o. Por exemplo: Essa separa\u00e7\u00e3o torna o projeto muito mais organizado. Criando as rotas As rotas s\u00e3o respons\u00e1veis por receber as requisi\u00e7\u00f5es HTTP. Exemplo: Cada rota chama um m\u00e9todo do Controller correspondente. Opera\u00e7\u00f5es do CRUD CREATE Insere novos documentos no banco. Exemplo: READ Lista todos os produtos cadastrados. Tamb\u00e9m podemos buscar um documento espec\u00edfico: UPDATE Atualiza um documento existente. O Mongoose localiza o documento e altera apenas os campos informados. DELETE Remove um documento do banco. Ap\u00f3s a exclus\u00e3o, o documento deixa de existir na cole\u00e7\u00e3o. Testando a API Durante o desenvolvimento utilizamos o Thunder Client, uma extens\u00e3o do Visual Studio Code que permite enviar requisi\u00e7\u00f5es HTTP. Com ela podemos testar facilmente: Sem precisar criar um frontend. Visualizando os dados Enquanto enviamos requisi\u00e7\u00f5es pelo Thunder Client, podemos acompanhar os documentos sendo criados no MongoDB Compass, interface gr\u00e1fica oficial do MongoDB. Isso facilita muito o aprendizado e a depura\u00e7\u00e3o da aplica\u00e7\u00e3o. Vantagens dessa arquitetura Separar a aplica\u00e7\u00e3o em: permite: Essa estrutura \u00e9 utilizada em in\u00fameros projetos profissionais. Principais d\u00favidas de quem est\u00e1 come\u00e7ando O MongoDB cria o banco automaticamente? Sim. O banco e a cole\u00e7\u00e3o s\u00e3o criados quando os primeiros documentos s\u00e3o gravados. Preciso criar tabelas? N\u00e3o. O MongoDB utiliza cole\u00e7\u00f5es e documentos. O Mongoose \u00e9 obrigat\u00f3rio? N\u00e3o. \u00c9 poss\u00edvel utilizar o driver oficial do MongoDB. Por\u00e9m, o Mongoose facilita bastante o desenvolvimento e \u00e9 amplamente utilizado. Posso utilizar MongoDB em aplica\u00e7\u00f5es grandes? Sim. Empresas de todos os tamanhos utilizam MongoDB em produ\u00e7\u00e3o devido \u00e0 sua flexibilidade e escalabilidade. Pr\u00f3ximos passos Depois de aprender CRUD com MongoDB, voc\u00ea pode evoluir para: Esses assuntos s\u00e3o fundamentais para desenvolver aplica\u00e7\u00f5es completas. Conclus\u00e3o Neste projeto voc\u00ea aprendeu como criar uma API REST utilizando Node.js, Express, MongoDB e Mongoose, implementando todas as opera\u00e7\u00f5es do CRUD em uma estrutura organizada e pr\u00f3xima da utilizada em aplica\u00e7\u00f5es reais. Esse conhecimento serve como base para praticamente qualquer sistema backend desenvolvido com JavaScript. Se voc\u00ea gostou deste conte\u00fado, continue acompanhando a s\u00e9rie de Backend aqui no blog e no canal Desvendando o C\u00f3digo, onde publicamos novos projetos pr\u00e1ticos todas as semanas. Continue aprendendo \u27a1\ufe0f Assista \u00e0 live completa deste projeto. \u27a1\ufe0f Veja tamb\u00e9m os artigos sobre Express.js, APIs REST, Node.js e JavaScript dispon\u00edveis aqui no blog. \u27a1\ufe0f Inscreva-se no canal Desvendando o C\u00f3digo para acompanhar novos projetos pr\u00e1ticos de desenvolvimento Full Stack.<\/p>\n","protected":false},"author":1,"featured_media":2272,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[21],"tags":[],"class_list":["post-2271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript"],"_links":{"self":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2271"}],"version-history":[{"count":4,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2271\/revisions"}],"predecessor-version":[{"id":2277,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/posts\/2271\/revisions\/2277"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=\/wp\/v2\/media\/2272"}],"wp:attachment":[{"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/desvendandoocodigo.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}