{"componentChunkName":"component---src-templates-blog-post-js","path":"/express-rest-db/","result":{"data":{"markdownRemark":{"html":"<h2 id=\"Introducao\" style=\"position:relative;\">Introdução<a href=\"#Introducao\" aria-label=\"Introducao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>No último <a href=\"https://programadev.com.br/express-rest-I/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">artigo</a> foi apresentado como construir uma API REST do zero usando <strong>NodeJS</strong> e <strong>Express</strong>, foi mostrado como usar o príncipio de injeção de dependências para conseguirmos desacoplar detalhes de implementações. </p>\n<p>Agora iremos evoluir um pouco mais esse projeto e iremos adicionar um banco de dados real, no caso será usado <strong>MongoDB</strong>. Vamos configurar o ambiente usando <strong>Docker Compose</strong> e vamos entrar em detalhes que não foram apresentados no artigo anterior como os verbos <strong>HTTP</strong> <strong>PUT</strong> e <strong>PATCH</strong>.</p>\n<h2 id=\"Adicionando-MongoDB\" style=\"position:relative;\">Adicionando MongoDB<a href=\"#Adicionando-MongoDB\" aria-label=\"Adicionando MongoDB permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Vamos adicionar o <strong>MongoDB</strong> no projeto e para isso iremos começar adicionando essa dependência com o comando abaixo:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> --save mongodb</code></pre></div>\n<p>Rodando esse comando o <strong>NPM</strong> irá adicionar e baixar as dependências necessárias.</p>\n<p>Como estamos usando o <strong>Docker Compose</strong> vamos criar o arquivo <em>docker-compose.yml</em> na raiz do projeto (caso não tenha o <strong>Dokcer</strong> ou o <strong>Docker Compose</strong> instalados basta seguir esse <a href=\"https://docs.docker.com/compose/install/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">tutorial</a>):</p>\n<div class=\"gatsby-highlight\" data-language=\"yml\"><pre class=\"language-yml\"><code class=\"language-yml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n\n  <span class=\"token key atrule\">mongo</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> mongo\n    <span class=\"token key atrule\">container_name</span><span class=\"token punctuation\">:</span> mongo\n    <span class=\"token key atrule\">environment</span><span class=\"token punctuation\">:</span> \n      <span class=\"token key atrule\">MONGO_INITDB_ROOT_USERNAME</span><span class=\"token punctuation\">:</span> admin\n      <span class=\"token key atrule\">MONGO_INITDB_ROOT_PASSWORD</span><span class=\"token punctuation\">:</span> password\n      <span class=\"token key atrule\">MONGO_INITDB_DATABASE</span><span class=\"token punctuation\">:</span> phonebook\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span> \n      <span class=\"token punctuation\">-</span> ./data/init.js<span class=\"token punctuation\">:</span>/docker<span class=\"token punctuation\">-</span>entrypoint<span class=\"token punctuation\">-</span>initdb.d/init.js<span class=\"token punctuation\">:</span>ro\n    <span class=\"token key atrule\">ports</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> 27017<span class=\"token punctuation\">:</span><span class=\"token number\">27017</span></code></pre></div>\n<p>Analisando o arquivo acima além da definição da versão que será usada pelo <strong>Docker Compose</strong> temos a declaração <em>services</em> que serão os serviços que serão inicializados, que no caso foi chamado de <em>mongo</em>.</p>\n<p>Logo após temos a o campo <em>image</em> onde definimos o nome e a versão da imagem <strong>Docker</strong> que será usada, nesse caso será usada a imagem do <strong>MongoDB</strong> e como não foi passado uma versão especifica será usado a versão <em>latest</em>.</p>\n<p>No campo <em>environment</em> definimos todas as variáveis de ambiente que usaremos nessa imagem. Basicamente definimos um <em>user</em> e <em>password</em> admins do banco e já iniciamos o <strong>MongoDB</strong> com o database <em>phonebook</em> que usamos na aplicação.</p>\n<p>Por fim seria útil além de iniciar o banco já iniciarmos com a <em>collection</em> de contatos, na <a href=\"https://hub.docker.com/_/mongo\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">documentação</a> do <strong>MongoDB</strong> no <strong>DockerHub</strong> encontramos uma forma de fazer isso, basta mapearmos um volume contendo um arquivo <code class=\"language-text\">.sh</code> ou <code class=\"language-text\">.js</code> e apontarmos para <code class=\"language-text\">docker-entrypoint-initdb.d</code> que ele será executado. Então aqui é o lugar perfeito para incluirmos a inicialização da collection como mostrado abaixo:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'---> CONNECTING DATABASE &lt;---'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\ndb <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">getSiblingDB</span><span class=\"token punctuation\">(</span><span class=\"token string\">'phonebook'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'---> CREATING COLLECTION &lt;---'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\ndb<span class=\"token punctuation\">.</span><span class=\"token function\">createCollection</span><span class=\"token punctuation\">(</span><span class=\"token string\">'contact'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'---> CREATING INDEX &lt;---'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\ndb<span class=\"token punctuation\">.</span>contact<span class=\"token punctuation\">.</span><span class=\"token function\">createIndex</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> name<span class=\"token operator\">:</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span> unique<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token function\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'---> SUCCESS TO RUN SCRIPT &lt;---'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>No código acima basicamente nos conectamos no database <em>phonebook</em> e criamos a collection <em>contact</em> e por fim criamos um índice para o campo <em>name</em>.</p>\n<p>Se iniciarmos o <strong>Docker Compose</strong> teremos uma saída que deverá conter entre outras coisas essa informação:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token operator\">></span> docker-compose up\n<span class=\"token operator\">></span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.js\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.705+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"NETWORK\"</span>,  <span class=\"token string\">\"id\"</span>:22943,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"listener\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Connection accepted\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"remote\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"127.0.0.1:38750\"</span>,<span class=\"token string\">\"connectionId\"</span>:3,<span class=\"token string\">\"connectionCount\"</span>:1<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.705+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"NETWORK\"</span>,  <span class=\"token string\">\"id\"</span>:51800,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"client metadata\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"remote\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"127.0.0.1:38750\"</span>,<span class=\"token string\">\"client\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"doc\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"application\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"MongoDB Shell\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"driver\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"MongoDB Internal Client\"</span>,<span class=\"token string\">\"version\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"4.4.5\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"os\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"type\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Linux\"</span>,<span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Ubuntu\"</span>,<span class=\"token string\">\"architecture\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"x86_64\"</span>,<span class=\"token string\">\"version\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"18.04\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> ---<span class=\"token operator\">></span> CONNECTING DATABASE <span class=\"token operator\">&lt;</span>---\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> ---<span class=\"token operator\">></span> CREATING COLLECTION <span class=\"token operator\">&lt;</span>---\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.720+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"STORAGE\"</span>,  <span class=\"token string\">\"id\"</span>:20320,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"createCollection\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"namespace\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"phonebook.contact\"</span>,<span class=\"token string\">\"uuidDisposition\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"generated\"</span>,<span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$uuid</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"dfab7eaa-99b0-4b3b-9f41-07b104a27fdb\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"options\"</span>:<span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.738+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"INDEX\"</span>,    <span class=\"token string\">\"id\"</span>:20345,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Index build: done building\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"buildUUID\"</span>:null,<span class=\"token string\">\"namespace\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"phonebook.contact\"</span>,<span class=\"token string\">\"index\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"_id_\"</span>,<span class=\"token string\">\"commitTimestamp\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$timestamp</span>\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:0,<span class=\"token string\">\"i\"</span>:0<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> ---<span class=\"token operator\">></span> CREATING INDEX <span class=\"token operator\">&lt;</span>---\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.739+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"INDEX\"</span>,    <span class=\"token string\">\"id\"</span>:20438,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Index build: registering\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"buildUUID\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$uuid</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"b8a5db18-ea67-4b2b-aad0-fe81e6f46df6\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"namespace\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"phonebook.contact\"</span>,<span class=\"token string\">\"collectionUUID\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$uuid</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"dfab7eaa-99b0-4b3b-9f41-07b104a27fdb\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"indexes\"</span>:1,<span class=\"token string\">\"firstIndex\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"name_1\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.811+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"INDEX\"</span>,    <span class=\"token string\">\"id\"</span>:20345,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Index build: done building\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"buildUUID\"</span>:null,<span class=\"token string\">\"namespace\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"phonebook.contact\"</span>,<span class=\"token string\">\"index\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"name_1\"</span>,<span class=\"token string\">\"commitTimestamp\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$timestamp</span>\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:0,<span class=\"token string\">\"i\"</span>:0<span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.812+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"INDEX\"</span>,    <span class=\"token string\">\"id\"</span>:20440,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Index build: waiting for index build to complete\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"buildUUID\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$uuid</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"b8a5db18-ea67-4b2b-aad0-fe81e6f46df6\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"deadline\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$numberLong</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"9223372036854775807\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"t\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$date</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"2021-04-12T19:35:18.812+00:00\"</span><span class=\"token punctuation\">}</span>,<span class=\"token string\">\"s\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"I\"</span>,  <span class=\"token string\">\"c\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"INDEX\"</span>,    <span class=\"token string\">\"id\"</span>:20447,   <span class=\"token string\">\"ctx\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"conn3\"</span>,<span class=\"token string\">\"msg\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"Index build: completed\"</span>,<span class=\"token string\">\"attr\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"buildUUID\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"uuid\"</span>:<span class=\"token punctuation\">{</span><span class=\"token string\">\"<span class=\"token variable\">$uuid</span>\"</span><span class=\"token builtin class-name\">:</span><span class=\"token string\">\"b8a5db18-ea67-4b2b-aad0-fe81e6f46df6\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n<span class=\"token operator\">></span> mongo    <span class=\"token operator\">|</span> ---<span class=\"token operator\">></span> SUCCESS TO RUN SCRIPT <span class=\"token operator\">&lt;</span>---</code></pre></div>\n<p>Com isso já teremos uma instância do <strong>MongoDB</strong> rodando e pronta para usar.</p>\n<h2 id=\"Injetando-o-banco-como-dependencia\" style=\"position:relative;\">Injetando o banco como dependência<a href=\"#Injetando-o-banco-como-dependencia\" aria-label=\"Injetando o banco como dependencia permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Voltando agora para a aplicação precisamos conectar o <strong>MongoDB</strong> no projeto, para isso iremos começar criando o arquivo <code class=\"language-text\">mongo_repository.js</code> na pasta <strong>repository</strong> do projeto:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> MongoClient <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'mongodb'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>MongoClient\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">MongoRepository</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">connectionString</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>connectionString <span class=\"token operator\">=</span> connectionString\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">async</span> <span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">await</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">_connect</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>connectionString<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">async</span> <span class=\"token function\">_connect</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">connectionString</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\n        <span class=\"token keyword\">const</span> client <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> MongoClient<span class=\"token punctuation\">.</span><span class=\"token function\">connect</span><span class=\"token punctuation\">(</span>connectionString<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>useUnifiedTopology<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">const</span> db <span class=\"token operator\">=</span> client<span class=\"token punctuation\">.</span><span class=\"token function\">db</span><span class=\"token punctuation\">(</span><span class=\"token string\">'phonebook'</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection <span class=\"token operator\">=</span> db<span class=\"token punctuation\">.</span><span class=\"token function\">collection</span><span class=\"token punctuation\">(</span><span class=\"token string\">'contact'</span><span class=\"token punctuation\">)</span>\n\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection\n\n\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token function\">insert</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">contact</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">insertOne</span><span class=\"token punctuation\">(</span>contact<span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">result</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Dados inseridos com sucesso\"</span><span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">.</span>result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">err</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span><span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">async</span> <span class=\"token function\">selectAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">find</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">toArray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">async</span> <span class=\"token function\">selectById</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">findOne</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>name<span class=\"token operator\">:</span> name<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">async</span> <span class=\"token function\">update</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name<span class=\"token punctuation\">,</span> contact</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">findOneAndUpdate</span><span class=\"token punctuation\">(</span>\n            <span class=\"token punctuation\">{</span>name<span class=\"token operator\">:</span> name<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">{</span>\n                $set<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                    name<span class=\"token operator\">:</span> contact<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">,</span>\n                    telephone<span class=\"token operator\">:</span> contact<span class=\"token punctuation\">.</span>telephone<span class=\"token punctuation\">,</span>\n                    address<span class=\"token operator\">:</span> contact<span class=\"token punctuation\">.</span>address\n                <span class=\"token punctuation\">}</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">{</span>\n                upsert<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span>\n            <span class=\"token punctuation\">}</span>    \n        <span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    \n    <span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">deleteOne</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>name<span class=\"token operator\">:</span> name<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">then</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">result</span> <span class=\"token operator\">=></span> console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token punctuation\">.</span><span class=\"token function\">catch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">err</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span><span class=\"token keyword\">throw</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">)</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> MongoRepository</code></pre></div>\n<p>O código acima é uma classe <strong>JavaScript</strong> onde no seu construtor definimos que queremos receber a string de conexão com o <strong>MongoDB</strong>, logo abaixo temos a função <em>init</em> que se conectará ao banco e a collection e na sequência temos os métodos para realizarmos as operações de <strong>CRUD</strong> no <strong>MongoDB</strong>.</p>\n<p>Com isso podemos trocar a classe <strong>InMemoryRepository</strong> pela <strong>MongoRepository</strong> no projeto facilmente de forma transparente para a aplicação:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> router <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'express'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">Router</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> MongoRepository <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'../repository/mongo_repository.js'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> Service <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'../service'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> MongoRepo <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MongoRepository</span><span class=\"token punctuation\">(</span><span class=\"token string\">'mongodb://admin:password@localhost:27017'</span><span class=\"token punctuation\">)</span>\nMongoRepo<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> service <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Service</span><span class=\"token punctuation\">(</span>MongoRepo<span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">param</span><span class=\"token punctuation\">(</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> next<span class=\"token punctuation\">,</span> name</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    req<span class=\"token punctuation\">.</span>name_from_param <span class=\"token operator\">=</span> name\n    <span class=\"token function\">next</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">post</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> contact <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>body\n\n    service<span class=\"token punctuation\">.</span><span class=\"token function\">create</span><span class=\"token punctuation\">(</span>contact<span class=\"token punctuation\">)</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">201</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>contact<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/:name'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> id <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>name_from_param\n\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> service<span class=\"token punctuation\">.</span><span class=\"token function\">getById</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>result <span class=\"token operator\">!==</span> <span class=\"token keyword\">undefined</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span>\n    <span class=\"token punctuation\">}</span>\n    \n    res<span class=\"token punctuation\">.</span><span class=\"token function\">sendStatus</span><span class=\"token punctuation\">(</span><span class=\"token number\">204</span><span class=\"token punctuation\">)</span>\n    \n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> service<span class=\"token punctuation\">.</span><span class=\"token function\">getAll</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span>\n    <span class=\"token punctuation\">}</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">sendStatus</span><span class=\"token punctuation\">(</span><span class=\"token number\">204</span><span class=\"token punctuation\">)</span>\n    \n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/:name\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> name <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>params<span class=\"token punctuation\">.</span>name\n    <span class=\"token keyword\">const</span> body <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>body\n\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> service<span class=\"token punctuation\">.</span><span class=\"token function\">put</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> body<span class=\"token punctuation\">)</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">delete</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/:name\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> name <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>params<span class=\"token punctuation\">.</span>name\n\n    service<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">sendStatus</span><span class=\"token punctuation\">(</span><span class=\"token number\">204</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> router</code></pre></div>\n<p>Entendo o código acima por partes, primeiramente temos a importação e nela já iniciamos o banco e o injetamos como dependência na <strong>Service</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">const</span> MongoRepository <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'../repository/mongo_repository.js'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> Service <span class=\"token operator\">=</span> <span class=\"token function\">require</span><span class=\"token punctuation\">(</span><span class=\"token string\">'../service'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> MongoRepo <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">MongoRepository</span><span class=\"token punctuation\">(</span><span class=\"token string\">'mongodb://admin:password@localhost:27017'</span><span class=\"token punctuation\">)</span>\nMongoRepo<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">const</span> service <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Service</span><span class=\"token punctuation\">(</span>MongoRepo<span class=\"token punctuation\">)</span></code></pre></div>\n<p>E o restante do código basicamente não se altera, essa é uma das grandes vantagens de não usar um código acoplado, é a facilidade que temos de trocá-lo rápidamente quando necessário, então temos um código com baixo acoplamento mas com alta coesão já que suas funcionalidades estão explicitas e segregadas.</p>\n<h2 id=\"Testando-as-alteracoes\" style=\"position:relative;\">Testando as alterações<a href=\"#Testando-as-alteracoes\" aria-label=\"Testando as alteracoes permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Da mesma forma que foi dito anteriormente nada foi alterado com a mudança do banco de dados então para quem estiver usando a aplicação nada deve mudar. Vamos testar isso agora.</p>\n<p>Realizando um <strong>POST</strong> teremos o seguinte resultado:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --location --request POST <span class=\"token string\">'http://localhost:3000/api'</span> <span class=\"token punctuation\">\\</span>\n--header <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n--data-raw <span class=\"token string\">'{\n\n    \"id\": 1,\n    \"name\": \"Kelly\",\n    \"telephone\": \"118888888\",\n    \"address\": \"Rua dos Bobos n 1\"\n\n}'</span> <span class=\"token operator\">|</span> json_pp</code></pre></div>\n<p>Teremos o seguinte resultado:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token punctuation\">{</span>\n    <span class=\"token string\">\"id\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token number\">1</span>,\n    <span class=\"token string\">\"name\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"Kelly\"</span>,\n    <span class=\"token string\">\"telephone\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"118888888\"</span>,\n    <span class=\"token string\">\"address\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"Rua dos Bobos n 1\"</span>,\n    <span class=\"token string\">\"_id\"</span><span class=\"token builtin class-name\">:</span> <span class=\"token string\">\"607d805caa972341ebd3e568\"</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Está muito parecido com o que tínhamos porém temos um detalhe que não havia antes que é o campo <code class=\"language-text\">_id</code> que está retornando. </p>\n<p>Isso é um problema por alguns motivos mas o principal deles é que o nosso modelo está seguindo a implementação do banco de dados e isso causa uma aplicação acoplada, para resolver isso teremos que começar a usar o modelo que foi definido no primeiro artigo, mas não será visto agora pois teremos que fazer algumas alterações para isso e acredito que ficará muito extenso fazer aqui e foge um pouco da temática desse artigo que é de se conectar ao banco do <strong>MongoDB</strong>; porém para agora vamos deixar assim mas sabendo que é um ponto de alteração também pelo fato de expor um <strong>id</strong> interno poder ser considerado uma falha de segurança da aplicação.</p>\n<p><em>Obs: Foi realizada uma alteração no módulo de rotas pois as chamadas GET /health e GET /:name estavam conflitando então foi necessário adicionar a seguinte configuração:</em></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">router<span class=\"token punctuation\">.</span><span class=\"token function\">param</span><span class=\"token punctuation\">(</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> next<span class=\"token punctuation\">,</span> name</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    req<span class=\"token punctuation\">.</span>name_from_param <span class=\"token operator\">=</span> name\n    <span class=\"token function\">next</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p><em>E após isso o roteamento do GET /health deve ser feito antes do roteamento do GET /:name</em></p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">router<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/health'</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>status<span class=\"token operator\">:</span> <span class=\"token string\">\"Ok\"</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span><span class=\"token string\">'/:name'</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> id <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>name_from_param\n\n    <span class=\"token keyword\">const</span> result <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> service<span class=\"token punctuation\">.</span><span class=\"token function\">getById</span><span class=\"token punctuation\">(</span>id<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span>result <span class=\"token operator\">!==</span> <span class=\"token keyword\">undefined</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">200</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">json</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span>\n    <span class=\"token punctuation\">}</span>\n    \n    res<span class=\"token punctuation\">.</span><span class=\"token function\">sendStatus</span><span class=\"token punctuation\">(</span><span class=\"token number\">204</span><span class=\"token punctuation\">)</span>\n    \n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2 id=\"PUT-vs-PATCH\" style=\"position:relative;\">PUT vs PATCH<a href=\"#PUT-vs-PATCH\" aria-label=\"PUT vs PATCH permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Temos hoje no projeto configurado as rotas para fazer criação, leitura, escrita e deleção de dados, mas como pode ser visto nós usamos o verbo HTTP <strong>PUT</strong> quando queremos atualizar um contato, porém o <strong>PUT</strong> é usado quando queremos realizar atualizações completas em uma entidade, o que devemos fazer nesse caso se quisermos atualizar somente um campo do contato?</p>\n<p>Para isso existe o verbo HTTP <strong>PATCH</strong> e ideia por trás dele é usarmos quando precisamos fazer atualizações parciais em uma entidade. Para isso vamos preparar a partir das rotas até a persistência no banco de dados.</p>\n<p>Começando pelo módulo <code class=\"language-text\">router</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\">router<span class=\"token punctuation\">.</span><span class=\"token function\">patch</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/:name\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">async</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">req<span class=\"token punctuation\">,</span> res</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">const</span> name <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>params<span class=\"token punctuation\">.</span>name\n    <span class=\"token keyword\">const</span> body <span class=\"token operator\">=</span> req<span class=\"token punctuation\">.</span>body\n\n    service<span class=\"token punctuation\">.</span><span class=\"token function\">patch</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> body<span class=\"token punctuation\">)</span>\n\n    res<span class=\"token punctuation\">.</span><span class=\"token function\">sendStatus</span><span class=\"token punctuation\">(</span><span class=\"token number\">204</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Não muda muita coisa do que já foi feito nas outras rotas, usamos a função <code class=\"language-text\">patch</code> do <strong>Express</strong> e informamos no path que passaremos o <code class=\"language-text\">name</code> como parâmetro e o <code class=\"language-text\">body</code> com o objeto que conterá a atualização parcial e chamamos a <code class=\"language-text\">service</code> que também deverá possuir uma função chamada <code class=\"language-text\">patch</code>.</p>\n<p>Agora no módulo <code class=\"language-text\">service</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">patch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name<span class=\"token punctuation\">,</span> body</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>repository<span class=\"token punctuation\">.</span><span class=\"token function\">patch</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">,</span> body<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Aqui é mais simples pois só é usado como um adaptador para a chamada ao módulo de persistência nesse momento.</p>\n<p>E por fim no arquivo <code class=\"language-text\">mongo_repository.js</code> no módulo <code class=\"language-text\">repository</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">async</span> <span class=\"token function\">patch</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">name<span class=\"token punctuation\">,</span> contact</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">await</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">entries</span><span class=\"token punctuation\">(</span>contact<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">,</span> value<span class=\"token punctuation\">]</span></span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> obj <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n        obj<span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> value\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>contactCollection<span class=\"token punctuation\">.</span><span class=\"token function\">findOneAndUpdate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>name<span class=\"token operator\">:</span> name<span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>$set<span class=\"token operator\">:</span> obj<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Aqui usamos a função <code class=\"language-text\">Object.entries</code> que itera sobre um objeto e devolve um array onde a chave é o nome do atributo e o valor é o valor daquele atributo e com isso conseguimos iterar por esse array e realizar a operação que atualizará somente os campos que informamos.</p>\n<p>Agora conseguimos testar e teremos a atualização parcial:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">curl</span> --location --request PATCH <span class=\"token string\">'http://localhost:3000/api/Kelly'</span> <span class=\"token punctuation\">\\</span>\n--header <span class=\"token string\">'Content-Type: application/json'</span> <span class=\"token punctuation\">\\</span>\n--data-raw <span class=\"token string\">'{\n    \"address\": \"novo endereco novo\"\n}'</span></code></pre></div>\n<p>Mas a questão que pode ser discutida é por que usar dois verbos HTTPs diferentes para fazer quase a mesma coisa? Por que não usar o <strong>PUT</strong> e fazer a atualização do que for passado, seja uma entidade inteira ou apenas parcial?</p>\n<p>A resposta pra isso é que os verbos HTTPs são guias de como a sua <strong>API</strong> funciona então a semântica deles importa e quando entrarmos nos detalhes sobre documentação de <strong>APIs</strong> vamos conseguir entender melhor que para quem usar a <strong>API</strong> é melhor se usarmos um padrão do que ter que ter uma longa documentação sobre os detalhes internos do processamento de dados. Mais detalhes sobre o <strong>PATCH</strong> podem ser encontrados <a href=\"https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Methods/PATCH\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">aqui</a>.</p>\n<h2 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Nesse artigo vimos como configurar o <strong>MongoDB</strong> usando o <strong>Docker Compose</strong> e como podemos usufruir da inversão de dependências para poder trocar facilmente dependências sem quebrar o nosso código ganhando mais produtividade.</p>\n<p>Vimos como conectar a aplicação ao <strong>MongoDB</strong> e também aprendemos um pouco sobre o verbo HTTP <strong>PATCH</strong> e saímos com um ponto de melhoria que é a exposição de entidades pela nossa <strong>API</strong>, veremos como melhorar essa parte no próximo artigo.</p>\n<h2 id=\"Codigo-do-projeto\" style=\"position:relative;\">Código do projeto<a href=\"#Codigo-do-projeto\" aria-label=\"Codigo do projeto permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Segue o <a href=\"https://github.com/guilhermegarcia86/phonebook/tree/feature/database\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a> com o projeto usado nesse artigo.</p>","fields":{"slug":"/express-rest-db/"},"frontmatter":{"date":"19 de abril de 2021","description":"Conectando uma aplicação web ao MongoDB","title":"Express e MongoDB","tags":["JavaScript","NodeJS","Express","Rest","Mongo"],"author":"Guilherme Alves","image":{"id":"712e371f-ffda-5698-be36-3c2be008aeca","publicURL":"/static/360b3ef7da0d7f14b487bd1dcaba8d90/capa-node-express-mongo.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABYUlEQVQoz51TS0rEQBDNUo/gYq6gIrjREVy4GBeiLgRhVAYUFD/gAUTwCh5B8QCKrsWN6IwhmAmZbEQU8v+YAW0hk+5n7EzCqAuNBUVVd/q9flWpFpAYY4w7ZZR7ts6+FTEhB9GeXYr/E2aARBscosN9N8C67L2kf3Wu8CFQsbU3g+r6BBbXxrC9P4vHFy29iNHiJZ/dHmGw1IeVgwrmdssYKvXj4u6EH+h0IhiGAcdx0G6389w0Tei6Dsuy4Louj7nCS+UU46MDqB3PY+FwGuUkv2qdc8I38op6vQ5RFHlUVRWSJEFRFDQaDTSbTciyzCMhJCUMYgfVpNTK5gimVoexnJQeUo8TxjSG53lcne/70DQNYRhy8Oc6CAKu2LZtRFEEgdK0R/f6NZY2yqjtTEI2btL+0WL9y3uYAU3yBIs8fyEr8ofTHnbHjCal5WOY5Qw/hvy3+RR6D2Uv5Tu4iH0A+Rg146gZ2kMAAAAASUVORK5CYII=","aspectRatio":1.7777777777777777,"src":"/static/360b3ef7da0d7f14b487bd1dcaba8d90/0823f/capa-node-express-mongo.png","srcSet":"/static/360b3ef7da0d7f14b487bd1dcaba8d90/c67b7/capa-node-express-mongo.png 320w,\n/static/360b3ef7da0d7f14b487bd1dcaba8d90/d3930/capa-node-express-mongo.png 640w,\n/static/360b3ef7da0d7f14b487bd1dcaba8d90/0823f/capa-node-express-mongo.png 1280w,\n/static/360b3ef7da0d7f14b487bd1dcaba8d90/c730b/capa-node-express-mongo.png 1920w,\n/static/360b3ef7da0d7f14b487bd1dcaba8d90/55bfe/capa-node-express-mongo.png 2240w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":11}},"pageContext":{"slug":"/express-rest-db/","previous":{"fields":{"slug":"/express-rest-I/"},"frontmatter":{"title":"NodeJS e Express","date":"06 abr, 2021"}},"next":{"fields":{"slug":"/express-celebrate-joi/"},"frontmatter":{"title":"Validando endpoints com NodeJS","date":"27 abr, 2021"}}}},"staticQueryHashes":["63159454"]}