Criando um CRUD completo com NodeJS, Express e MongoDB — Parte 3/3

Patrick Isidoro
BaixadaNerd
Published in
8 min readOct 16, 2018

Fala galera, blz?!

Voltamos para nossa terceira e última parte desse CRUD, essa parte será um pouco mais extensa que as anteriores. Creio que todos estejam animados para finalizar esse projeto, então vamos nessa..

(Caso ainda não tenha visto as partes anteriores: Parte 1/Parte 2)

Ps. Desculpem a demora, mas infelizmente ocorreram alguns imprevistos e não pude finalizar antes.. mas vamos direto ao que importa.. kkkk’

MongoDB

Para usarmos o MongoDB como banco de dados, nós precisamos instalá-lo e podemos fazer isso através do npm conforme abaixo.

npm install mongodb --save 

Uma vez instalado, podemos nos conectar ao MongoDB através do método de conexão do Mongo.Client, conforme mostrado no código abaixo:

const MongoClient = require('mongodb').MongoClient 
const uri = "<!-- insira aqui o caminho para seu BD -->"
MongoClient.connect(uri, (err, client) => {
// ... start the server
})

O código acima será implementado mais adiante. Para este tutorial, irei utilizar o mLab, crie uma conta no site deles, é fácil e grátis. Após verificar sua conta, você pode criar um novo Deployment, selecione a opção sandbox, em seguida coloque o nome do seu banco de dados.

Quando terminar de implementar, entre na aba ‘Users’ e crie um usuário e uma senha para o banco de dados, você vai usar esses dados para conectar ao banco que você acabou de criar.

Finalmente, pegue o url do MongoDB e adicione-o ao seu método MongoClient.connect. Certifique-se de usar seu usuário e senha do banco de dados!

Em seguida, queremos iniciar nosso servidor apenas quando o banco de dados estiver conectado. Por isso, vamos mover o app.listen para o método connect. Lembra daquele código de conexão, logo no início deste post? Vamos implementá-lo agora.

Certifique-se de alterar o usuário e senha com os seus dados(<dbuser>:<dbpassword>)

Acabamos de configurar o MongoDB. Agora, vamos criar uma coleção para armazenar os dados do nosso projeto. A propósito, uma coleção é um local nomeado para armazenar objetos, você pode criar quantas coleções quiser. Podem armazenar objetos como “nomes”, “produtos”, ou qualquer outro nomenclatura que você escolher. Vamos iniciar as operações do CRUD.

Salvando nossos dados no banco.

Iremos criar a coleção “data”, que irá armazenar nossos dados, apenas colocando-a entre aspas ao chamar o método db.collection() do MongoDB. Ao criar a coleção, também podemos salvar nossa primeira entrada no MongoDB com o método save simultaneamente.

Quando terminarmos de salvar, precisamos redirecionar o usuário para algum lugar (senão o usuário ficará esperando para sempre até que nosso servidor seja alterado). Nesse caso, vamos redirecioná-los de volta para /, o que faz com que os navegadores sejam recarregados.

Agora, se você inserir algo no elemento <form>, poderá ver uma entrada na sua coleção do MongoDB e a confirmação através do seu terminal.

Nossos objetos da coleção
Confirmação de dados salvo em nosso BD

Obaa, já temos algum conteúdo na coleção, por que não tentar mostrar ao usuário quando eles chegarem à nossa página?

CRUD — READ

Mostrando o conteúdo de nossa coleção.

Temos que fazer algumas coisas para mostrar o conteúdo armazenado em nosso banco de dados para o nosso usuário. Precisamos:

  • Pegar o conteúdo no banco de dados.
  • Usar nossa template engine para exibir esse conteúdo.

Well, let’s go in baby steps..

Podemos obter o conteúdo do nosso BD usando o método find disponível no método collection.

O método de localização retorna um cursor(um objeto do Mongo), este objeto contém todas as citações de nosso banco de dados. Ele também contém várias outras propriedades e métodos que nos permitem trabalhar com dados facilmente. Um desses métodos é o método toArray.

O método toArray recebe uma função callback que nos permite fazer algumas coisas com os objetos que recuperamos do mLab. Vamos tentar fazer um console.log() nesses resultados e ver o que conseguimos!

Incluímos o trecho de código em destaque

Após incluir o trecho acima, vá até seu navegador e preencha o <form> e clique em submit . Você verá o resultado em seu terminal.

Conteúdo que preenchemos em nosso <form>

Ótimo! Você está vendo o conteúdo preenchido (o mesmo que foi salvo no banco de dados). Concluímos a primeira parte, que é obter dados do MongoLab. A próxima parte será renderizar esse conteúdo usando nossa template engine. Bom, para isso crie um novo arquivo dentro da pasta ‘views’ conforme abaixo:

Crie o arquivo show.ejs

Agora abra-o e crie uma tabela que mostre o conteúdo que enviamos pelo formulário.

Conteúdo do arquivo show.ejs

Note que na linha 18 nós estamos mostrando nossa variável data combinada com o método .forEach() onde irá percorrer o conteúdo da collection em nosso banco de dados, e criamos então a function(details) que nas linhas 20 e 21, irá mostrar o conteúdo que estamos chamando com <%= details.name%> e <%= details.surname%> respectivamente.

Em seguida vamos fazer uma pequena alteração no nosso server.js. Vamos deixá-lo conforme abaixo.

Conteúdo de nosso arquivo server.js

Volte ao navegador e preencha o formulário, você será redirecionado para a página localhost:3000/show , e verá o conteúdo abaixo(provavelmente seu conteúdo será diferente.. rs’).

Nosso conteúdo enviado pelo <form>

CRUD — UPDATE

Atualizando dados.

A operação UPDATE é usada quando você quer alterar algum conteúdo no BD, não irei entrar em detalhes sobre o protocolo HTTP, irei abordar como funciona essa requisição em outro artigo.

Note que incluí os buttons no arquivo show.ejs onde irá direcionar para a página de edit, e incluí também o de delete, o qual será nossa próxima etapa do CRUD.

Código da view show.ejs.
View renderizada com os botões.

Para nosso projeto, irei fazer um post na rota /edit/:id e irei tratar essa atualização conforme abaixo. Note que fiz algumas alterações na estrutura do projeto, aproveitando um recurso de rotas que o Express() nos oferece.

Veja abaixo que, com o recurso de rotas fornecido, podemos apenas indicar qual a rota iremos observar e dentro dessa rota, teremos os métodos abaixo.

Método update dentro de server.js.

No método.get, estou armazenando em var id, o id que iremos passar no params vindo da view (faremos primeiro nossos métodos no servidor, e depois a view), estou usando essa variável para encontrar o objeto que iremos alterar, isso está sendo feito na função .find(Object(id)) que irá percorrer o array em nosso banco, e quando encontrar o nosso objeto, irá renderizar a nossa view edit.ejs e também passando o resultado desse objeto para ser usado com os valores dentro do <form> em nossa view.

edit.ejs

Na imagem ao lado, vemos o código da nossa view, criei um novo arquivo dentro da pasta views, com o nomeedit.ejs. Nele há um formulário parecido com o que temos no index.ejs, porém, ao invés de incluir um novo “nome” e “sobrenome”, iremos alterar o valor já existente. Note que incluí um botão para voltar aos registros salvos, e outro que fará o post para editar nosso objeto, veja que já estou importando os dados que está sendo renderizado conforme imagem acima(ou ao lado, como preferir.. kkkk). Note também que estou passando o id do objeto no params, e já estou usando os valores da nossa base de dados dentro do input para melhor visualização do dado que estamos editando.

View renderizada.

Voltando ao nosso código de update pouco mais acima, note que quando fazemos um .post o nosso server irá armazenar as variáveis que iremos usar para dar update em nosso objeto, updateOne() recebe o nosso objeto que estamos alterando, e $set recebe os dados do form que queremos atualizar, se tudo estiver correto, seremos redirecionado para a tela onde mostra todos nossos registros, e estamos printando em nosso console a informação de “Atualizado no banco de dados”.

console.log(“Atualizado no Banco de Dados”)
Registro alterado.

Feito as alterações em nossas views, e com o método update sendo tratado corretamente, damos sequência no nosso CRUD.

CRUD — DELETE

Deletando dados.

A operação DELETE é a última operação desse nosso projeto, após ter feito corretamente o UPDATE, e tendo adquirido esse conhecimento, você verá que o método .delete é bem simples. Novamente não irei entrar em méritos de requisições HTTP, tratarei essa operação de forma simplificada.

Lembra que fizemos o botão de “Deletar” em nossa página /show? Pois é, já estamos enviando o id que iremos apagar do nosso BD, então será simples fazer esse tratamento.

Operação DELETE
Tela de Registros.
console.log()
Objeto deletado!

Note que quando clicar no botão de deletar, seremos direcionados para /delete/:id e então, com o método .get iremos pegar e armazenar o id enviado, e da mesma forma que o updateOne, estamos passsando o id a ser buscado em nosso BD e então deletá-lo, printamos em nosso console a informação de deletado e seremos redirecionados para a tela de registros.

Feito isso, encerramos nosso projeto de CRUD Simples em NodeJS.

Essa última parte do projeto se extendeu bastante, e também demorou demais para sair.. Novamente peço desculpas, mas não pude continuar e lançar essa parte anteriormente.

Todo o código desse projeto pode ser visto no meu repo do Github. Espero ter passado da maneira mais simplificada e explicativa possível, caso tenham alguma dúvida fiquem a vontade para me questionar, logo abaixo estão meus contatos.

Gostaria de agradecer a todos pelo apoio e palavras de incentivo para voltar a escrever.. rs

Em especial agradeço ao Eugênio Oliveira, que conversou bastante comigo e me incentivou ainda mais a voltar e terminar esse projeto.

Podem me encontrar na maioria das redes sociais como Patrick Isidoro. #TamoJunto galera! Logo mais volto com outros artigos.

Facebook | LinkeIn | Github

--

--

Patrick Isidoro
BaixadaNerd

Um pequeno gafanhoto, aprendiz padawan, amante da tecnologia e entusiasta de ethical hacking, buscando conhecimento e a procura de uma boa xícara de café..