Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Node js e Mongo DB para iniciantes, Manuais, Projetos, Pesquisas de Programação Linear

Manual para iniciantes. É um manual para iniciantes. Iniciantes.

Tipologia: Manuais, Projetos, Pesquisas

2021

Compartilhado em 08/01/2021

ricardo-loureiro-14
ricardo-loureiro-14 🇧🇷

1 documento

1 / 53

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Como criar uma
web-app usando
Node.js + MongoDB
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35

Pré-visualização parcial do texto

Baixe Node js e Mongo DB para iniciantes e outras Manuais, Projetos, Pesquisas em PDF para Programação Linear, somente na Docsity!

Como criar uma

web-app usando

Node.js + MongoDB

Sumário

    1. Introdução
    1. Preparando o ambiente
    1. Conhecendo o NODE
    1. Conhecendo o banco de dados
    1. Conectando no banco de dados
    1. Persistindo os dados
    1. Conclusão

Introdução 4

Luiz Fernando

Dev Evangelist
Umbler

Hoje eu vou contar uma história de como um coala muito esperto aprendeu a criar aplicações usando Node.js e MongoDB. Essa história se passa em meados de 2016, antes do Umblerito ajudar a criar nossas plataformas de Node.js e MongoDB na Umbler e estava apenas aprendendo a trabalhar com estas tecnologias.

Se você é um programador iniciante nestas duas tecnologias, tenho certeza que você vai se identificar. Além disso, ensinar um coala de dois anos a programar é algo deveras divertido também.

Se você nunca programou antes, nem na faculdade ou no técnico, talvez este não seja o melhor livro para você aprender. Considero aqui que você já programa para web, em qualquer tecnologia. Ter assistido os vídeos de Node. js e MongoDB que gravei para a Umbler ajuda também (estão disponíveis em nosso canal no YouTube, assiste lá!).

Espero que você goste da leitura e que o conteúdo seja útil.

Um abraço e sucesso.

Introdução 5

Eu estava passeando pela Umbler outro dia quando encontrei o Umblerito cabisbaixo. Sim, nosso querido coala estava atirado em um puff na sala de jogos sem muito ânimo, com uma cara de partir o coração. Ele coçava sua barriga que, confesso, está um pouco mais avantajada do que deveria, e olhava para o horizonte, com um marasmo que dava sono só de olhar. Obviamente, fiquei intrigado, uma vez que nosso mascote geralmente é muito inquieto e está sempre fazendo mil e uma coisas pelos corredores da empresa. Tratei de pegar um biscoito Passatempo (o favorito do Umblerito) e sentei ao lado dele para conversar.

Conversa vai, conversa vem, ele me explicou que estava chateado. Ao que parece todo mundo sabia criar aplicações Node.js com MongoDB, exceto ele. Claro que isso era um exagero. Ele se sentia atrasado em relação aos outros programadores pois ainda criava todas suas aplicações com C# ou Java e usando bancos SQL tradicionais. Não sei de onde ele tirou que isso era um problema, mas reconheci nesse desabafo uma preocupação genuína e que corriqueiramente percebo em meus alunos da faculdade também: a preocupação de não estar acompanhando a velocidade das mudanças tecnológicas.

Como bom amigo que sou, me ergui do puff com um pulo e estendi a mão pra ele.

  • Bora criarmos algo em Node.js com MongoDB?

Ele me olhou incrédulo com seus pequenos olhos negros. Afinal, era um fim de tarde de sexta-feira e todos já estavam se preparando para ir embora após mais uma sessão de ShareIT, uma espécie de TEDx que fazemos internamente na Umbler semanalmente, evento no qual um de nós ensina algo novo aos demais.

  • Não preciso mais do que algumas poucas horas para eu te dar um overview e, juntos, criarmos uma aplicação completa em Node e Mongo. Topa o desafio?

Preparando o

ambiente

A language that doesn’t affect the way you

think about programming is not worth knowing.

- Alan Perlis

Preparando o ambiente 8

Vai rodar na minha máquina?

Esta foi a primeira dúvida do Umblerito. Ele tinha um computador bem antigo, 2008 ou 2009 eu acho.

  • Claro que vai!

Eu falava isso com conhecimento de causa. Meu próprio notebook à época era um modelo 2009, um Core 2 Duo que ao longo dos anos eu fui fazendo alguns upgrades como 8GB RAM e 256GB SSD. Mas já vi Node rodar liso em configurações bem inferiores a minha. É realmente uma tecnologia muito democrática considerando que é gratuita, multi plataforma, open-source e muito leve.

  • E como se instala?

Disse o rechonchudo mamífero estralando seus dedos e pescoço como se estivesse se alongando para algo esportivo.

  • Acessa aí: nodejs.org e procura por um grande e verde botão de download. Para nossa aplicação de teste tanto faz se você baixar a versão mais recente ou a LTS, que em teoria é a mais estável.
  • Hm. Já baixou e instalei usando NNF. É só isso mesmo?

O Umblerito começou sua carreira em TI no suporte técnico, como a maioria dos programadores. Ele ainda carrega algumas gírias dessa época como NNF para Next-Next-Finish, bem coisa de sysadmin mesmo.

  • Sim, mas se quiser, você pode baixar o Visual Studio Code também, ele é um editor de texto com alguns recursos bem legais para programadores Node.js. Você sabia que ele foi criado usando Node.js?
  • Sério? Mas isso não é da Microsoft? Eles não apóiam apenas .NET?

Enquanto falava comigo, ele colocava o nome da ferramenta no Google seguido da palavra ‘download’ para buscar pelo link de download. Como todo bom programador faz.

  • Sério?
  • Sim, o MongoDB é um conjunto de utilitários de linha de comando escritos em C++, não precisa de instalador, é só extrair os arquivos em uma pasta e pronto.
  • Legal!
  • Sim, e está apenas começando.

Eu poderia ajudar ele a testar o MongoDB agora, mas vou deixar para depois, quando fizer mais sentido. Temos muito o que explorar no Node antes de precisar de persistência.

Conhecendo o

NODE

Some of the best programming is done on paper,

really. Putting it into the computer is just a

minor detail.

- Max Kanat-Alexander

Conhecendo o NODE 13

  • Uma vez dentro desta pasta, meu pequeno amigo, vamos instalar uma extensão global do Node.js chamada Express Generator. Ela serve para facilitar o nosso trabalho, um scaffold que gera um projeto Node.js funcional e básico usando um framework web chamado Express.
  • Que complicado. Não tem um jeito mais fácil?
  • Na verdade é bem fácil, você vai ver, apenas execute os seguintes comandos no console:
  • O NPM é o gerenciador de pacotes do Node, certo?
  • Sim, o Node Package Manager. INSTALL é o comando para instalar um novo pacote e “-g” indica que este pacote será instalado globalmente, para todo ambiente Node.js da sua máquina. Se não usar o “-g” você instalaria o express-generator somente para este projeto, entende?
  • Sim, sim. E como se usa o Express Generator na prática?
  • Usando o comando “express” na pasta do seu projeto e uma série de parâmetros. Experimente assim:
  • Opa, acho que funcionou. O terminal está dizendo que vários arquivos e pastas foram criados.
  • Sim, todo um projeto básico Express foi criado. Além disso, a flag “-e” habilitou o suporte a EJS no seu projeto, um view render baseado em HTML
  • JS e a flag “--git” criou…
  • O repositório git local e o .gitignore!
  • Exato. Tá vendo ali no console aquela instrução que diz para rodar um “npm install” na pasta do seu projeto? Faz isso agora.

cd c:\users\umblerito\nodeprojects\listadecompras (Windows) ou cd /users/umblerito/nodeprojects/listadecompras (Unix)

npm install -g express-generator

express -e --git

Conhecendo o NODE 14

  • O comando NPM INSTALL quando usando sem especificar o nome de um pacote, procura por um arquivo chamado package.json na raiz do seu projeto Node.
  • Abri aqui, é um arquivo JSON com as configurações do projeto, certo?
  • Sim, dentre as configurações estão todas dependências deste projeto, os pacotes que ele precisa para rodar com sucesso. O NPM INSTALL lê essas dependências e baixa todas elas para sua máquina, em uma pasta node_ modules dentro do seu projeto.
  • Aham, criou aqui. E agora?
  • Agora rode o comando NPM START na raiz do seu projeto para executá- lo no seu navegador.
  • Funcionou?
  • Acho que sim, olha:
  • Isso mesmo. Ele subiu um servidor web na porta 3000.
  • Então o Node é pra isso, para fazer websites?
  • No way! Node é muito mais que isso. Na verdade fazer sites é a última coisa que eu te recomendaria fazer com ele. O foco do Node é I/O não bloqueante, ou seja, chamadas de leitura e escrita assíncronas, como disco, rede, database, etc. Ele é muito bom para fazer APIs, bots, mensageria, IoT e muito mais coisas interessantes. Claro, você pode fazer aplicações web completas com ele também, como vou te mostrar já, já.

npm start

npm install

Conhecendo o NODE 16

  • Na primeira linha é carregado um módulo local chamado app, que estudaremos na sequência. Depois, um módulo de debug usado para imprimir informações úteis no terminal durante a execução do servidor. Na última linha do primeiro bloco, carregamos o módulo http, elementar para a construção do nosso webserver.

Umblerito olhava atentamente a tudo que eu falava, intercalando olhares para a tela do notebook onde eu apontava alguns elementos. Se ele tinha uma boa qualidade de aluno era a escuta ativa. Se você não sabe o que é, sugiro dar uma pesquisada e desenvolver esta habilidade, é muito útil.

  • No bloco seguinte, apenas definimos a porta que vai ser utilizada para escutar requisições. Essa porta pode ser definida em uma variável de ambiente (process.env.PORT) ou caso essa variável seja omitida, será usada a porta 3000.
  • E o servidor http é criado usando a função createServer?
  • Sim, passando o app por parâmetro e depois definindo que o server escute (listen) a porta predefinida. Os dois últimos comandos definem handlers para os eventos de error e listening, que apenas ajudam na depuração dos comportamentos do servidor.
  • E só com isso, com pouquíssimas linhas, é possível criar um webserver em Node.js?
  • Sim, esse arquivo www é a estrutura mínima para iniciar uma aplicação web com Node.js e toda a complexidade da aplicação em si cabe ao

1 2 3 4 5 6 7 8 9

10 11 12

var app = require(‘../app’); var debug = require(‘debug’)(‘workshop:server’); var http = require(‘http’);

var port = normalizePort(process.env.PORT || ‘3000’); app.set(‘port’, port);

var server = http.createServer(app);

server.listen(port); server.on(‘error’, onError); server.on(‘listening’, onListening);

Conhecendo o NODE 17

módulo app.js gerenciar. Ao ser carregado com o comando require, toda a configuração da aplicação é executada. Abre o arquivo app.js na raiz do seu projeto, para eu poder te explicar ele:

  • Tá vendo estas declarações de variáveis no topo? Isto referencia elas a alguns pacotes, dependências, funcionalidades do Node e rotas. Rotas direcionam o tráfego e contém também alguma lógica de programação. Quando criamos o projeto Express, ele criou estes códigos JS pra gente. Na sequência você deve ver:
  • Este é bem importante. Ele cria uma instância do Express e associa nossa variável app a ele. A próxima seção usa esta variável para configurar coisas do Express.

var app = express();

1 2 3 4 5 6 7 8 9 var express = require(‘express’); var path = require(‘path’); var favicon = require(‘serve-favicon’); var logger = require(‘morgan’); var cookieParser = require(‘cookie-parser’); var bodyParser = require(‘body-parser’);

var index = require(‘./routes/index’); var users = require(‘./routes/users’);

Conhecendo o NODE 19

  • Deixa eu adivinhar, é estilo o padrão MVC?
  • Sim, isso aí. Routes são regras para manipulação de requisições HTTP. Você diz que, por exemplo, quando chegar uma requisição no caminho ‘/teste’, o fluxo dessa requisição deve passar pela função ‘X’. No app.js, registramos duas rotas:
  • Carregamos primeiro os módulos que vão lidar com as rotas da nossa aplicação. Cada módulo é um arquivo .js na pasta especificada (routes). Depois, dizemos ao app que para requisições no caminho raiz da aplicação (‘/’), o módulo index.js irá tratar. Já para as requisições no caminho ‘/users’, o módulo users.js irá lidar. Ou seja, o app.js apenas repassa as requisições conforme regras básicas, como um…
  • Middleware.
  • Exato. Agora abre o arquivo routes/index.js para eu te mostrar o que acontece após redirecionarmos requisições na raiz da aplicação para ele.
  • Primeiro está sendo carregado o módulo express e, com ele, o objeto router, que serve para manipular as requisições recebidas por esse módulo. O bloco central de código é o que mais nos interessa.

1 2 3 4 5 6 7 8 var express = require(‘express’); var router = express.Router();

router.get(‘/’, function(req, res, next) { res.render(‘index’, { title: ‘Express’ }); });

module exports = router;

1 2 3 4 5 6 7 8 // códigos… var index = require(‘./routes/index’); var users = require(‘./routes/users’);

// mais códigos...

app.use(‘/’, index); app.use(‘/users’, users);

Conhecendo o NODE 20

  • Deixa eu adivinhar: o router.get especifica que quando o router receber uma requisição GET na raiz do domínio ela será tratada pela função passada como segundo parâmetro.
  • Sim, é aqui que a magia acontece.
  • E se eu quisesse usar outros verbos HTTP usaria router.post, router. delete, etc?
  • Exato. A função anônima passada como segundo parâmetro do router. get será disparada toda vez que chegar um GET na raiz da aplicação.
  • Esses são os famosos callbacks do Node…
  • Sim, usaremos bastante eles hoje, mas mais para frente sugiro você dar uma olhada em Promises e Async/Await, recursos mais recentes do Node que ajudam a evitar o famoso callback hell.
  • Sim, já ouvi falar. E esses três parâmetros: req, res e next?
  • Vamos focar nos parâmetros req e res hoje. O ‘req’ é a requisição em si, já o ‘res’ é a resposta. Dentro da função de callback do router.get, temos o seguinte código:
  • Aqui dizemos que deve ser renderizado na resposta (res.render) a view ‘index’ com o model, os dados para a view, entre chaves ({}).
  • Parecido com o MVC, onde o controller liga o model com a view?
  • Exato! As views são referenciadas no res.render sem a extensão, e todas encontram-se na pasta views. Vamos ver elas mais tarde. Já o model é um objeto JSON com informações que você queira enviar para a view utilizar. Nesse exemplo, estamos enviando um título (title) para view usar.
  • Interessante. Se eu mudar a string ‘Express’ para outra coisa e reiniciar minha aplicação vai aparecer outro texto na tela da index?
  • Sim. Derruba a sua aplicação no terminal (Ctrl+C), execute-a com ‘npm start’ e acesse novamente localhost:3000 para ver o texto alterado.
  • Legal, funcionou! Aqui na pasta views têm arquivos .ejs, que extensão é essa?
  • Lembra, lá no início da criação da nossa aplicação Express, usando o express-generator, que eu disse para usar a opção ‘-e’ no terminal?

1 res.render(‘index’, { title: ‘Express’ });