Node - Js e Microservices - Fontes
Node - Js e Microservices - Fontes
js e Microservices
LuizTools.com.br
Facebook.com/luiztools
Twitter.com/luiztools
LinkedIn.com/in/luizfduartejr
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 1
Código 2
Código 3
Código 4
Código 5
Código 6
Código 7
Código 8
Código 9
Código 10
Código 11
Código 12
Código 13
Código 14
Código 15
Código 16
Código 17
Código 18
Código 19
Código 20
Código 21
Código 22
Código 23
Código 24
Código 25
Código 26
Código 27
Código 28
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 29
Código 30
Código 31
Código 32
Código 33
Código 34
Código 35
Código 36
Código 37
Código 38
Código 39
Código 40
Código 41
Código 42
Código 43
Código 44
Código 45
Código 46
Código 47
Código 48
Código 49
Código 50
Código 51
Código 52
Código 53
Código 54
Código 55
Código 56
Código 57
Código 58
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 59
Código 60
Código 61
Código 62
Código 63
Código 64
Código 65
Código 66
Código 67
Código 68
Código 69
Código 70
Código 71
Código 72
Código 73
Código 74
Código 75
Código 76
Código 77
Código 78
Código 79
Código 80
Código 81
Código 82
Código 83
Código 84
Código 85
Código 86
Código 87
Código 88
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 89
Código 90
Código 91
Código 92
Código 93
Código 94
Código 95
Código 96
Código 97
Código 98
Código 99
Código 100
Código 101
Código 102
Código 103
Código 104
Código 105
Código 106
Código 107
Código 108
Código 109
Código 110
Código 111
Código 112
Código 113
Código 114
Código 115
Código 116
Código 117
Código 118
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 119
Código 120
Código 121
Código 122
Código 123
Código 124
Código 125
Código 126
Código 127
Código 128
Código 129
Código 130
Código 131
Código 132
Código 133
Código 134
Código 135
Código 136
Código 137
Código 138
Código 139
Código 140
Código 141
Código 142
Código 143
Código 144
Código 145
Código 146
Código 147
Código 148
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 149
Código 150
Código 151
Código 152
Código 153
Código 154
Código 155
Código 156
Código 157
Código 158
Código 159
Código 160
Código 161
Código 162
Código 163
Código 164
Código 165
Código 166
Código 167
Código 168
Código 169
Código 170
Código 171
Código 172
Código 173
Código 174
Código 175
Código 176
Código 177
Código 178
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 179
Código 180
Código 181
Código 182
Código 183
Código 184
Código 185
Código 186
Código 187
Código 188
Código 189
Código 190
Código 191
Código 192
Código 193
Código 194
Código 195
Código 196
Código 197
Código 198
Código 199
Código 200
Código 201
Código 202
Código 203
Código 204
Código 205
Código 206
Código 207
Código 208
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 209
Código 209
Código 210
Código 211
Código 212
Código 213
Código 214
Código 215
Código 216
Código 217
Código 218
Código 219
Código 220
Código 221
Código 222
Código 223
Código 224
Código 225
Código 226
Código 227
Código 228
Código 229
Código 230
Código 231
Código 232
Código 233
Código 234
Código 235
Código 236
Código 237
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Curtiu o livro?
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 1
node -v
Código 2
node
Código 3
var x=0
console.log(x)
Código 4
console.log(x+1)
Código 5
console.log('Olá mundo!')
Código 6
node /documents/index.js
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 7
console.log('Hello World')
Código 8
var x = 1
Código 9
x = 'teste'
Código 10
let x, y, z
Código 11
let x = 1
Código 12
// comentário de uma linha
// tudo após as duas barras é considerado comentário
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 13
/* comentário
de múltiplas linhas */
Código 14
// Declaracao e inicializacao de duas variaveis, troque os valores se quiser
let a = 5
let b = 2
// Varios exemplos de operacoes sobre variaveis
console.log('a = ' + a)
console.log('b = ' + b)
console.log('a + b = ' + (a + b))
console.log('a - b = ' + (a - b))
console.log('a * b = ' + (a * b))
console.log('a / b = ' + (a / b))
console.log('a % b = ' + (a % b))
console.log('a++ = ' + (a++))
console.log('--b = ' + (--b))
console.log('a = ' + a)
console.log('b = ' + b)
Código 15
let a = 15
let b = 12
let c = '15'
console.log('a = ' + a)
console.log('b = ' + b)
// aqui a igualdade é apenas sobre o valor, mas são valores diferentes
console.log('a == b : ' + (a == b))
// aqui, o interpretador acha que são iguais, pois o valor é o mesmo, mas com tipos
diferentes
console.log('a == c : ' + (a == c))
// agora sim, valida-se o tipo primeiro e depois o valor
console.log('a === c : ' + (a === c))
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
// ou seja, use sempre === e !==
console.log('a !== b : ' + (a !== b))
console.log('a < b : ' + (a < b))
console.log('a > b : ' + (a > b))
console.log('a <= b : ' + (a <= b))
console.log('a >= b : ' + (a >= b))
Código 16
var result = false
i = 0
y = a*x + b
Código 17
const i = 0
let y = i + 2
console.log('Valor do i: ' + i)
Código 18
function soma( n
um1, num2){ return num1 +
num2 }
Código 19
var somar = function(num1, num2) { return num1 + num2 }
Código 20
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
somar(1,2)
Código 21
outraFuncao(somar)
Código 22
var somar = (num1,num2) => num1 + num2
Código 23
const nome = 'Luiz'
Código 24
const nome = 'Luiz'
const sobrenome = 'Duarte'
console.log('Prof. ' + nome + sobrenome)
Código 25
const nome = 'Luiz'
const idade = 28
console.log('Prof. ' + nome + ' tem ' + idade + ' anos!')
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 26
let str = 'Teste'
console.log(str.length)
console.log(str.toUpperCase())
console.log(str.toLowerCase())
str = '1'
console.log(parseInt(str))
str = '1.5'
console.log(parseFloat(str))
Código 27
for (var i=0; i < 10; i++)
console.log('i=' + i)
Código 28
for (var i=0; i < 10; i++){
console.log(“i=” + i)
//outra instrução qualquer, quantas quiser
}
Código 29
let chave = true
while(chave === true)
chave = false
Código 30
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
let chave = true
while(chave === true){
//outra instrução qualquer
console.log('Imprime!')
chave = false
}
Código 31
let i = 0
while(i < 10){
//outra instrução qualquer
console.log('Imprime!')
i++
}
Código 32
let chave = false;
do{
//outra instrução qualquer
console.log('Imprime!')
}while(chave === true)
Código 33
let x = 0
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
console.log(x++)
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 34
for(var i=0; i < 10; i++)
console.log(i)
Código 35
let x=0;
while(x < 10)
console.log(x++)
Código 36
let x=0;
do{
console.log(x)
} while(x++ < 10)
Código 37
let x=0
console.log(x++)
Código 38
let x=0
console.log(++x)
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 39
let x = 0
if(x === 0)
console.log('X é zero!')
Código 40
let x = 0
if(x === 0){
console.log('X é zero!')
x++
}
Código 41
let x = 0
if(x % 2 === 0){
console.log('X é PAR!')
}
Código 42
for(var i=1; i <= 20; i++){
if(i % 2 === 0){
console.log(i + ' é PAR!')
}
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 43
for(var i=1; i <= 20; i++){
if(i % 2 == 0){
console.log(i + ' é PAR!')
}
console.log(i + ' é ÍMPAR!')
Código 44
for(var i=1; i <= 20; i++){
if(i % 2 === 0){
console.log(i + ' é PAR!')
} else {
console.log(i + ' é ÍMPAR!')
}
}
Código 45
for(var i=0; i < 10; i++){
if(i >= 5){
if(i <= 7){
console.log('FUNCIONOU')
}
}
}
Código 46
for(var i=0; i < 10; i++){
if(i >= 5 && i <= 7){
console.log('FUNCIONOU')
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
}
}
Código 47
var letra = 'A'
switch (letra) {
case 'A': console.log('Vogal A'); break
case 'E': console.log('Vogal E'); break
case 'I': console.log('Vogal I') ; break
case 'O': console.log('Vogal O') ; break
case 'U': console.log('Vogal U') ; break
default: console.log('Não é uma vogal')
}
Código 48
const numeros = []
Código 49
numeros[0] = 5
Código 50
numeros[1] = 3
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 51
numeros[1] = 6
Código 52
const numeros = []
numeros[0] = 8
numeros[1] = 4
numeros[2] = 29
Código 53
const inventores= []
inventores[0] = 'Einstein'
inventores[1] = 'Edson'
inventores[2] = 'Galileu'
inventores[3] = 'Da Vinci'
Código 54
const inventor = inventores[3]
console.log(inventor)
Código 55
const numeros = []
for(var i=0; i < 10; i++)
numeros[i] = 1
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 56
const numeros = []
for(var i=0; i < 10; i++)
numeros.push(1)
Código 57
for(var i=0; i < numeros.length; i++)
console.log(numeros[i])
Código 58
const cliente = {}
Código 59
cliente.nome =
'L
uiz'
Código 60
cliente.exibirMensagem = function(msg){
console.log(msg)
}
Código 61
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
const cliente = {
nome: 'Luiz',
saldo: 100.0,
idade: 29,
gaucho: true
}
Código 62
const clientes = [cliente1, cliente2, { nome:”cliente3”, saldo:5.0, idade:21, gaúcho:false }]
Código 63
const http = require('http')
Código 64
> require('http').METHODS
[ 'ACL',
'BIND',
'CHECKOUT',
'CONNECT',
'COPY',
'DELETE',
'GET',
'HEAD',
'LINK',
'LOCK',
'M-SEARCH',
'MERGE',
'MKACTIVITY',
'MKCALENDAR',
'MKCOL',
'MOVE',
'NOTIFY',
'OPTIONS',
'PATCH',
'POST',
'PROPFIND',
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
'PROPPATCH',
'PURGE',
'PUT',
'REBIND',
'REPORT',
'SEARCH',
'SUBSCRIBE',
'TRACE',
'UNBIND',
'UNLINK',
'UNLOCK',
'UNSUBSCRIBE' ]
Código 65
> require('http').STATUS_CODES
{ '100': 'Continue',
'101': 'Switching Protocols',
'102': 'Processing',
'200': 'OK',
'201': 'Created',
'202': 'Accepted',
'203': 'Non-Authoritative Information',
'204': 'No Content',
'205': 'Reset Content',
'206': 'Partial Content',
'207': 'Multi-Status',
'208': 'Already Reported',
'226': 'IM Used',
'300': 'Multiple Choices',
'301': 'Moved Permanently',
'302': 'Found',
'303': 'See Other',
'304': 'Not Modified',
'305': 'Use Proxy',
'307': 'Temporary Redirect',
'308': 'Permanent Redirect',
'400': 'Bad Request',
'401': 'Unauthorized',
'402': 'Payment Required',
'403': 'Forbidden',
'404': 'Not Found',
'405': 'Method Not Allowed',
'406': 'Not Acceptable',
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
'407': 'Proxy Authentication Required',
'408': 'Request Timeout',
'409': 'Conflict',
'410': 'Gone',
'411': 'Length Required',
'412': 'Precondition Failed',
'413': 'Payload Too Large',
'414': 'URI Too Long',
'415': 'Unsupported Media Type',
'416': 'Range Not Satisfiable',
'417': 'Expectation Failed',
'418': 'I\'m a teapot',
'421': 'Misdirected Request',
'422': 'Unprocessable Entity',
'423': 'Locked',
'424': 'Failed Dependency',
'425': 'Unordered Collection',
'426': 'Upgrade Required',
'428': 'Precondition Required',
'429': 'Too Many Requests',
'431': 'Request Header Fields Too Large',
'451': 'Unavailable For Legal Reasons',
'500': 'Internal Server Error',
'501': 'Not Implemented',
'502': 'Bad Gateway',
'503': 'Service Unavailable',
'504': 'Gateway Timeout',
'505': 'HTTP Version Not Supported',
'506': 'Variant Also Negotiates',
'507': 'Insufficient Storage',
'508': 'Loop Detected',
'509': 'Bandwidth Limit Exceeded',
'510': 'Not Extended',
'511': 'Network Authentication Required' }
Código 66
const server = http.createServer((req, res) => {
//cada requisição recebida dispara este callback
})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 67
const server = http.createServer((req, res) => {
//res é um objeto http.ServerResponse
})
Código 68
response.statusCode = 500
response.statusMessage = 'Internal Server Error'
Código 69
const http = require('http')
const port = 3000
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 't ext/plain')
res.end('Olá Mundo!\n')
})
server.listen(port, () => {
console.log(`Servidor iniciou em http://localhost:${port}/`)
})
Código 70
C:\Users\luiztools\documents> node servidor.js
Código 71
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
const https = require('https')
const options = {
hostname: 'www.google.com.br',
port: 443,
path: '/about/',
method: 'GET'
}
const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)
res.on('data', (d) => {
process.stdout.write(d)
})
})
req.on('error', (error) => {
console.error(error)
})
req.end()
Código 72
const https = require('https')
const data = JSON.stringify({
exemplo: 'valor'
})
const options = {
hostname: 'requestbin.fullcontact.com',
port: 443,
path: '/14dbyg71',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
}
const req = https.request(options, (res) => {
console.log(`statusCode: ${res.statusCode}`)
res.on('data', (d) => {
process.stdout.write(d)
})
})
req.on('error', (error) => {
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
console.error(error)
})
req.write(data)
req.end()
Código 73
C:\node> npm install -g express-generator
Código 74
C:\node>express -e --git workshop
Código 75
cd workshop
npm install
Código 76
> npm start
Código 77
var app = require('../app');
var debug = require('debug')('w
orkshop:server');
var http = require('http');
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
app.set('port', port);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
Código 78
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan') ;
var cookieParser = require('c ookie-parser');
var bodyParser = require('body-parser') ;
Código 79
var app = express();
Código 80
// view engine setup
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
Código 81
module.exports = app;
Código 82
// códigos…
var index = require('./routes/index');
var users = require('./routes/users');
// mais códigos...
app.use('/', index);
app.use('/users', users);
Código 83
var express = require('express');
var router = express.Router();
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 84
res.render('index', { title: 'Express' });
Código 85
// view engine setup
app.engine('html', require('ejs').renderFile);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
Código 86
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>
Código 87
res.render('index', { title: 'Express' });
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 88
var express = require('express');
var router = express.Router();
Código 89
var new = require('./routes/new);
app.use('/new', new);
Código 90
//coloque todo o conteúdo abaixo dentro de um arquivo index.js
//rode o comando "npm init" na mesma pasta do index.js e apenas aperte Enter para tudo
//rode os comandos "npm install -S express fs" para instalar as dependências
//use o comando "node index" na pasta do index.js para iniciar esse programa
const express = require('express')
const fs = require('fs') //fs é o módulo file-system, para ler arquivos
const app = express()
app.get('/', processRequest)
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
}
response.write(data)
response.end();
console.log('leu arquivo')
});
app.listen(3000)
Código 91
<!DOCTYPE html>
<html>
<head>
<title>Programação para Internet</title>
<meta charset="utf-8" />
</head>
<body>
<% var teste = 0; %>
<p>Apenas um texto</p>
<%= teste %>
</body>
</html>
Código 92
<!DOCTYPE html>
<html>
<head>
<title>Programação para Internet</title>
<meta charset="utf-8" />
</head>
<body>
<% if(exibirDiv) { %>
<div>Apenas uma div</div>
<% } else { %>
<div>Apenas outra div</div>
<% } %>
</body>
</html>
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 93
router.get('/', function(req, res, next){
res.render('index', { exibirDiv: true });//ou false, você escolhe
})
Código 94
express -e --git crud
Código 95
cd crud
npm install
Código 96
<!DOCTYPE html>
<html>
<head>
<title>CRUD de Clientes</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<meta charset="utf-8" />
</head>
<body>
<h1>Listagem de Clientes</h1>
<p>Clientes já cadastrados no sistema.</p>
<table style="width:50%">
<thead>
<tr style="background-color: #CCC">
<td style="width:50%">Nome</td>
<td style="width:15%">Idade</td>
<td style="width:15%">UF</td>
<td>Ações</td>
</tr>
</thead>
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
<tbody>
<tr>
<td colspan="4">Nenhum cliente cadastrado.</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="4">
<a href="/new">Cadastrar Novo</a>
</td>
</tr>
</tfoot>
</table>
</body>
</html>
Código 97
<!DOCTYPE html>
<html>
<head>
<title>CRUD de Clientes</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<meta charset="utf-8" />
</head>
<body>
<h1><%= title %></h1>
<p>Preencha os dados abaixo para salvar o cliente.</p>
<form action="<%= action %>" method="POST">
<p>
<label>Nome: <input type="text" name="nome" /></label>
</p>
<p>
<label>Idade: <input type="number" name="idade" /></label>
</p>
<p>
<label>UF: <select name="uf">
<option>RS</option>
<option>SC</option>
<option>PR</option>
<!-- coloque os estados que quiser -->
</select></label>
</p>
<p>
<a href="/">Cancelar</a> | <input type="submit" value="Salvar" />
</p>
</form>
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
/body>
<
</html>
Código 98
/* GET new page. */
router.get('/new', function(req, res, next) {
res.render('new', { title: "Cadastro de Cliente", action: "/new" })
})
Código 99
/* POST new page. */
router.post('/new', function(req, res, next) {
//futuramente vamos salvar o cliente aqui
res.redirect('/?new=true')
})
Código 100
npm start
Código 101
C:\mongo\bin> mongod --dbpath C:\mongo\data
Código 102
c:\mongo\bin> mongo
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 103
show databases
Código 104
> use workshop
Código 105
> show collections
Código 106
> db.customers.find()
Código 107
> db.customers.insert({ nome: "Luiz", idade: 29 })
Código 108
> custArray = [{ nome : "Fernando", idade : 29 }, { nome : "Teste", "uf" : "RS" }]
> db.customers.insert(custArray)
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 109
> db.customers.find().pretty()
Código 110
> db.customers.find({uf: "RS"})
Código 111
> db.customers.find({nome: { $regex: /a/ }})
Código 112
> db.customers.find({idade: {$gte: 18}})
Código 113
> db.customers.find({nome: "Luiz", idade: {$gte: 18}})
Código 114
> db.customers.find({nome: { $regex: /a/ }, idade: {$gte: 18}})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 115
> db.customers.find().skip(1).limit(10)
Código 116
> db.customers.find().sort({idade: 1})
Código 117
> db.customers.update({nome: "Luiz"}, {nome: "Luiz", idade: 29, uf: "RS"})
Código 118
> db.customers.updateOne({_id: ObjectId("59ab46e433959e2724be2cbd")}, {$set: {idade:
28}})
Código 119
> db.customers.updateOne({nome: "LuizTools"}, {nome: "LuizTools", uf: "RS"}, {upsert:
true})
Código 120
> db.customers.delete({nome: "Luiz"})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 121
npm install mongodb
Código 122
const mongoClient = require("mongodb").MongoClient
mongoClient.connect("mongodb://localhost:27017/workshop")
.then(conn => global.conn = conn.db("workshop"))
.catch(err => console.log(err))
Código 123
conn => global.conn = conn.db("workshop")
Código 124
global.db = require('../db')
Código 125
function findAll(callback){
global.conn.collection("customers").find({}).toArray(callback);
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 126
module.exports = { findAll }
Código 127
/* GET home page. */
router.get('/', function(req, res) {
global.db.findAll((e, docs) => {
if(e) { return console.log(e ); }
res.render('index', { docs });
})
})
Código 128
Código 129
<% } else {
docs.forEach(function(customer){ %>
<tr>
<td style="width:50%"><%= customer.nome %></td>
<td style="width:15%"><%= customer.idade %></td>
<td style="width:15%"><%= customer.uf %></td>
<td><!-- em breve --></td>
</tr>
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
<% })
}%>
Código 130
npm start
Código 131
function insert(customer, callback){
global.conn.collection("customers").insert(customer, callback);
}
Código 132
module.exports = { findAll, insert }
Código 133
/* POST new page. */
router.post('/new', function(req, res, next) {
const nome = req.body.nome
const idade = parseInt(req.body.idade);
const uf = req.body.uf
global.db.insert({nome, idade, uf}, (err, result) => {
if(err) { return console.log(e
rr) }
res.redirect('/?new=true')
})
})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 134
<td><a href="/edit/<%= customer._id %>">Editar</a></td>
Código 135
const ObjectId = require(" mongodb").ObjectId;
function findOne(id, callback){
global.conn.collection("customers").findOne(new ObjectId(id), callback);
}
Código 136
module.exports = { findAll, insert, findOne }
Código 137
/* GET edit page. */
router.get('/edit/:id', function(r eq, res, next) {
var id = req.params.id
global.db.findOne(id, (e, doc) => {
if(e) { return console.log(e ) }
console.log(doc.nome)
res.render('new', { title: 'Edição de Cliente', doc: doc, action: '/edit/' + doc._id })
})
})
Código 138
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
/* GET new page. */
router.get('/new', function(req, res, next) {
res.render('new', { title: 'Cadastro de Cliente', doc: {} })
})
Código 139
<form action="<%= action %>" method="POST">
<p>
<label>Nome: <input type="text" name="nome" value="<%= doc.nome %>" /></label>
</p>
<p>
<label>Idade: <input type="number" name="idade" value="<%= doc.idade %>"
/></label>
</p>
<p>
<label>UF: <select name="uf">
<% const s = "selected" %>
<option <% if(doc.uf === "RS") { %><%= s %><% } %>>RS</option>
<option <% if(doc.uf === "SC") { %><%= s %><% } %>>SC</option>
<option <% if(doc.uf === "PR") { %><%= s %><% } %>>PR</option>
<!-- coloque os estados que quiser -->
</select></label>
</p>
<p>
<a href="/">Cancelar</a> | <input type="submit" value="Salvar" />
</p>
</form>
Código 140
function update(id, customer, callback){
global.conn.collection("customers").update({_id: new ObjectId(id)}, customer, callback);
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 141
/* POST edit page. */
router.post('/edit/:id', function(r eq, res) {
const id = req.params.id
const nome = req.body.nome
const idade = parseInt(req.body.idade)
const uf = req.body.uf
global.db.update(id, {nome, idade, uf}, (e, result) => {
if(e) { return console.log(e) }
res.redirect('/?edit=true')
})
})
Código 142
<td>
<a href="/edit/<%= customer._id %>">Editar</a>
<a href="/delete/<%= customer._id %>" onclick="return confirm('Tem
certeza?');">Excluir</a>
</td>
Código 143
function deleteOne(id, callback){
global.conn.collection("customers").deleteOne({_id: new ObjectId(id)}, callback);
}
Código 144
/* GET delete page. */
router.get('/delete/:id', function(req, res) {
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
var id = req.params.id
global.db.deleteOne(id, (e, r) => {
if(e) { return console.log(e) }
res.redirect('/?delete=true')
})
})
Código 145
<script>
if(location.href.indexOf(' delete=true') != -1){
alert('Cliente excluído com sucesso!');
}
else if(location.href.indexOf('edit=true') != -1){
alert('Cliente editado com sucesso!');
}
else if(location.href.indexOf('new=true') != -1){
alert('Cliente cadastro com sucesso!');
}
</script>
Código 146
npm init
Código 147
npm i express mongodb body-parser
Código 148
const mongoClient = require("mongodb").MongoClient
mongoClient.connect('mongodb://localhost/workshop')
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
.then(conn => global.conn = conn.db("workshop"))
.catch(err => console.log(err))
Código 149
global.db = require('./db')
const express = require('express')
const app = express()
const bodyParser = require('b ody-parser')
const port = 3000 //porta padrão
Código 150
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
Código 151
//definindo as rotas
const router = express.Router()
router.get('/', (req, res) => res.json({ message: 'Funcionando!' }))
app.use('/', router)
Código 152
//inicia o servidor
app.listen(port)
console.log('API funcionando!')
Código 153
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
node app
Código 154
function findCustomers(callback){
global.conn.collection(' customers').find().toArray(callback)
}
Código 155
// GET /clientes
router.get('/clientes', (req, res) => global.db.findCustomers((err, docs) => {
if(err) res.status(500).json(err)
else res.json(docs)
}))
Código 156
const ObjectId = require(" mongodb").ObjectId
function findCustomer(id, callback){
global.conn.collection(' customers').findOne(new ObjectId(id), callback)
}
Código 157
// GET /clientes/{id}
router.get('/clientes/:id', (req, res) => global.db.findCustomer(req.params.id, (err, doc) => {
if(err) res.status(500).json(err)
else res.json(doc)
}))
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 158
function insertCustomer(customer, callback){
global.conn.collection(' customers').insert(customer, callback)
}
Código 159
// POST /clientes
router.post('/clientes', (req, res) => {
const customer = req.body
global.db.insertCustomer(c ustomer, (err, result) => {
if(err) res.status(500).json(err)
else res.json({ message: 'Cliente cadastrado com sucesso!'})
})
})
Código 160
curl -X POST -d "{'nome':'Curl', 'idade': 11, 'uf': 'RJ'}" http://localhost:3000/clientes
Código 161
function updateCustomer(id, customer, callback){
global.conn.collection(' customers').update({_id: new ObjectId(id)}, customer,
callback)
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 162
// PUT /clientes/{id}
router.put('/clientes/:id', (req, res) => {
const id = req.params.id
const customer = req.body
global.db.updateCustomer(i d, customer, (err, result) => {
if(err) res.status(500).json(err)
else res.json({ message: 'Cliente atualizado com sucesso!'})
})
})
Código 163
curl -X PUT -d "{'nome':'Postman', 'idade': 20, 'uf': 'SP'}"
http://localhost:3000/clientes/59ac8350e07d4f10cf6a74f6
Código 164
function patchCustomer(id, updates, callback){
global.conn.collection(' customers').update({_id: new ObjectId(id)}, { $set: updates },
callback)
}
Código 165
// PATCH /clientes/{id}
router.patch('/clientes/:id', (req, res) => {
const id = req.params.id
const updates = req.body
global.db.patchCustomer(id, updates, (err, result) => {
if(err) res.status(500).json(err)
else res.json({ message: 'Cliente atualizado com sucesso!'})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
})
})
Código 166
curl -X PATCH -d "{'nome':'POSTMAN'}"
http://localhost:3000/clientes/59ac8350e07d4f10cf6a74f6
Código 167
function deleteCustomer(id, callback){
global.conn.collection(' customers').deleteOne({_id: new ObjectId(id)}, callback)
}
Código 168
// DELETE /clientes/{id}
router.delete('/clientes/:id', (req, res) => {
const id = req.params.id
global.db.deleteCustomer(i d, (err, result) => {
if(err) res.status(500).json(err)
else res.json({ message: 'Cliente excluído com sucesso!'})
})
})
Código 169
curl -X DELETE http://localhost:3000/clientes/59ac8350e07d4f10cf6a74f6
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 170
function aplicarDescontoTest(){
return aplicarDesconto(10,2) === 8
}
Código 171
function aplicarDesconto(valor, desconto){
return valor - desconto
}
Código 172
function aplicarDescontoGrandeTest(){
return aplicarDesconto(1,10) === 0
}
Código 173
function aplicarDesconto(valor, desconto){
if(desconto > valor) return 0
return valor - desconto
}
Código 174
npm init
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 175
node index.test
Código 176
{
"name": "exemplotdd",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "node index.test"
},
"author": "LuizTools",
"license": "ISC"
}
Código 177
npm test
Código 178
npm install tape
Código 179
const test = require('tape')
const index = require('./index')
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 180
test('Aplicar desconto', (t) => {
t.assert(index.aplicarDesconto(1 0,5) === 5, "Descontou corretamente")
t.end()
})
Código 181
function aplicarDesconto(valor, desconto){
if(desconto > valor) return 0
return valor - desconto
}
Código 182
"test": "node index.test | tap-spec"
Código 183
test('Aplicar desconto grande', (t ) => {
t.assert(index.aplicarDesconto(5 ,10) === 0, "Descontou corretamente")
t.end()
})
Código 184
npm install supertest express body-parser
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 185
//app.js
const index = require('./index')
const express = require('express')
const app = express()
const bodyParser = require('b ody-parser')
const port = 3000 //porta padrão
//definindo as rotas
const router = express.Router();
router.get('/', (req, res) => res.json({ message: 'Funcionando!' }));
// GET /aplicarDesconto
router.get('/aplicarDesconto/:valor/:desconto', (req, res) => {
const valor = parseInt(r eq.params.valor)
const desconto = parseInt(req.params.desconto)
res.json({valorDescontado: index.aplicarDesconto(valor,desconto)})
})
app.use('/', router)
Código 186
const test = require('tape')
const supertest = require('supertest')
const app = require('./app')
Código 187
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
test('GET /aplicarDesconto/10/5', (t) => {
supertest(app)
.get('/aplicarDesconto/10/5')
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
t.error(err, 'Sem erros')
t.assert(res.body.valorDescontado === 5, "Desconto correto")
t.end()
})
})
Código 188
"test": "node ./tests/* | tap-spec"
Código 189
npm install express mongodb dotenv-safe tape tap-spec helmet morgan
Código 190
const MongoClient = require("mongodb").MongoClient;
var connection = null;
var db = null;
function connect(callback){
if(connection) return callback(n
ull, db);
function disconnect(){
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
i f(!connection) return true;
connection.close();
connection = null;
return true;
}
Código 191
#.env, don't commit to repo
MONGO_CONNECTION=mongodb://localhost:27017
DATABASE_NAME=movie-service
PORT=3000
Código 192
#.env.example, commit to repo
MONGO_CONNECTION=
DATABASE_NAME=
PORT=
Código 193
const test = require('tape');
const mongodb = require('./mongodb') ;
function runTests(){
test('MongoDB Connection', (t) => {
mongodb.connect((err, conn) => {
t.assert(conn, "Connection established");
t.end();
});
})
Código 195
{
" name": "movie-service",
" version": " 1.0.0" ,
" description" : "S ervice to provide detailed movies info." ,
" main": "index.js",
" scripts" : {
"start" : "n
ode index" ,
"test": "node index.test | tap-spec"
} ,
" author": " ",
" license" : " I SC" ,
" dependencies": {
"express" : "^ 4.16.3",
"mongodb" : "^ 3.0.7" ,
"tap-spec" : "^ 4.1.1",
"tape" : "^ 4.9.0"
}
}
Código 196
Código 197
function getAllMovies(callback){
mongodb.connect((err, db) => {
db.collection("movies").find().toArray(callback);
})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
}
function getMoviePremiers(callback){
function disconnect(){
return mongodb.disconnect();
}
Código 198
const test = require('tape');
const repository = require('./repository') ;
function runTests(){
t.assert(!err && movies && movies.length > 0, "All Movies Returned") ;
t.end();
});
})
Código 199
require("dotenv-safe").config();
require("./config/mongodb.test").runTests();
require("./repository/repository.test").runTests();
Código 200
db.movies.insert([{
titulo: "Os Vingadores: Guerra Infinita",
sinopse: "Os heróis mais poderosos da Marvel enfrentando o Thanos",
duracao: 120,
dataLancamento: ISODate("2018-05-01T00:00:00Z"),
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
imagem: "http://www.luiztools.com.br/vingadores-gi.jpg",
categorias: ["Aventura", "Ação"]
},
{
titulo: "Os Vingadores: Era de Ultron",
sinopse: "Os heróis mais poderosos da Marvel enfrentando o Ultron",
duracao: 110,
dataLancamento: ISODate("2016-05-01T00:00:00Z"),
imagem: "http://www.luiztools.com.br/vingadores-eu.jpg",
categorias: ["Aventura", "Ação"]
},
{
titulo: "Os Vingadores",
sinopse: "Os heróis mais poderosos da Marvel enfrentando o Loki",
duracao: 100,
dataLancamento: ISODate("2014-05-01T00:00:00Z"),
imagem: "http://www.luiztools.com.br/vingadores.jpg",
categorias: ["Aventura", "Ação"]
}])
Código 201
const express = require('express') ;
const morgan = require('morgan');
const helmet = require('helmet') ;
var server = null;
api(app, repository);
function stop(){
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
if(server) server.close();
return true;
}
Código 202
const test = require('tape');
const server = require('./server') ;
function runTests(){
Código 203
require("dotenv-safe").config();
require("./config/mongodb.test").runTests();
require("./repository/repository.test").runTests();
require("./server/server.test").runTests();
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 204
module.exports = (app, repository) => {
Código 205
const test = require('tape');
const supertest = require('supertest');
const movies = require('./movies');
const server = require("../server/server") ;
const repository = require("../repository/repository");
function runTests(){
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
if(res.body && res.body.length > 0) id = res.body[0]._id;
t.error(err, 'No errors')
t.assert(res.body && res.body.length > 0, "All Movies returned")
t.end()
})
})
supertest(app)
.get('/movies/' + id)
.expect('Content-Type', /json/)
.expect(200)
.end((err, res) =>{
t.error(err, 'No errors')
t.assert(res.body, "Movies By Id returned")
t.end()
})
})
server.stop();
})
}
Código 206
require("dotenv-safe").config();
const movies = require('./api/movies') ;
const server = require("./server/server");
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
const repository = require("./repository/repository");
Código 207
{
"name": "cinema-catalog-service",
"version": "1.0.0",
"description": "Provide cinema catalog info.",
"main": "index.js",
"scripts": {
"start": "node index",
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "LuizTools",
"license": "ISC"
}
Código 208
npm install express morgan tape mongodb helmet supertest dotenv-safe
Código 209
{
_id: ObjectId("sasacsa85s7sdc7sd"),
cidade: "Porto Alegre",
uf: "RS",
pais: "BR",
cinemas: [
{
_id: ObjectId("68df5gd5g6ddf") ,
nome: "Cinemark Bourbon Ipiranga",
salas: [
{
nome: 1,
sessoes: [
{
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
data: ISODate(" 2018-06-01T09:00:00Z"),
idFilme: ObjectId("9ds68dsvdsvs876v"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
]
},
{
data: ISODate(" 2018-06-01T11:00:00Z"),
idFilme: ObjectId("9ds68dsvdsvs876v"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: true },
]
}
]
}
]
}
]
}
Código 209
./mongod --dbpath /pasta-do-seu-microservice/data --port 27018
Código 210
./mongo --port 27018
Código 211
use cinema-catalog-service
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 212
db.cinemaCatalog.insert([
{
cidade: "Gravataí",
uf: "RS",
cinemas: []
},
{
cidade: "Porto Alegre",
uf: "RS",
pais: "BR",
cinemas: [
{
_id: ObjectId(),
nome: "Cinemark Bourbon Ipiranga",
salas: [
{
nome: 1,
sessoes: [
{
data: ISODate("2018-06-01T09:00:00Z"),
idFilme: ObjectId(" 5aefc5029ce83b1eb6b89e57"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
]
},
{
data: ISODate("2018-06-01T11:00:00Z"),
idFilme: ObjectId(" 5aefc5029ce83b1eb6b89e57"),
filme: "Vingadores: Guerra Infinita",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: true },
]
},
{
data: ISODate("2018-06-01T13:00:00Z"),
idFilme: ObjectId("5 aefc5029ce83b1eb6b89e58"),
filme: "Vingadores: Era de Ultron",
valor: 20.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
{ numero: 2, disponivel: true },
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
]
}
]
},
{
nome: 2,
sessoes: [
{
data: ISODate("2018-06-01T09:00:00Z"),
idFilme: ObjectId(" 5aefc5029ce83b1eb6b89e58"),
filme: "Vingadores: Era de Ultron",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
]
},
{
data: ISODate("2018-06-01T11:00:00Z"),
idFilme: ObjectId(" 5aefc5029ce83b1eb6b89e58"),
filme: "Vingadores: Era de Ultron",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: true },
]
},
{
data: ISODate("2018-06-01T13:00:00Z"),
idFilme: ObjectId("5 aefc5029ce83b1eb6b89e58"),
filme: "Vingadores: Era de Ultron",
valor: 20.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
{ numero: 2, disponivel: true },
]
}
]
}
]
},
{
_id: ObjectId(),
nome: "GNC Lindóia",
salas: [
{
nome: 100,
sessoes: [
{
data: ISODate("2018-06-01T09:00:00Z"),
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
idFilme: ObjectId("5 aefc5029ce83b1eb6b89e59"),
filme: "Os Vingadores",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
]
},
{
data: ISODate("2018-06-01T11:00:00Z"),
idFilme: ObjectId("5 aefc5029ce83b1eb6b89e59"),
filme: "Os Vingadores",
valor: 25.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: true },
]
},
{
data: ISODate("2018-06-01T13:00:00Z"),
idFilme: ObjectId(" 5aefc5029ce83b1eb6b89e58"),
filme: "Vingadores: Era de Ultron",
valor: 20.00,
assentos: [
{ numero: 1, disponivel: true },
{ numero: 2, disponivel: false },
{ numero: 2, disponivel: true },
]
}
]
}
]
}
]
}])
Código 213
#.env, don't commit to repo
MONGO_CONNECTION=mongodb://localhost:27018
DATABASE_NAME=cinema-catalog-service
PORT=3001
Código 214
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
//index.test.js
require("dotenv-safe").config();
require("./config/mongodb.test").runTests();
require("./server/server.test").runTests();
Código 215
{
"name": "cinema-catalog-service",
"version": "1.0.0",
"description": "Provide cinema catalog info.",
"main": "index.js",
"scripts": {
"start": "node index",
"test": "node index.test | tap-spec"
},
"author": "LuizTools",
"license": "ISC",
"dependencies": {
"express": "^4.16.3",
"helmet": "^3.12.0",
"mongodb": "^3.1.0-beta4",
"morgan": "^1.9.0",
"supertest": "^3.0.0",
"tape": "^4.9.0"
}
}
Código 216
//repository.js
const mongodb = require("../config/mongodb");
const ObjectId = require(" mongodb").ObjectId;
function getAllCities(callback){
mongodb.connect((err, db) => {
db.collection("cinemaCatalog") .find({}, {cidade:1,uf:1,pais:1}).toArray(callback);
})
}
function disconnect(){
return mongodb.disconnect();
}
Código 217
const test = require('tape');
const repository = require('./repository') ;
function runTests(){
t.assert(!err && cities && cities.length > 0, "All Cities Returned");
t.end();
});
})
t.assert(!err && cinemas && cinemas.length > 0, "All Cinemas Returned By City Id");
t.end();
});
})
Código 219
function getMoviesByCinemaId(cinemaId, callback){
var objCinemaId = ObjectId(c inemaId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog") .aggregate([
{$match: {"cinemas._id": objCinemaId}},
{$unwind: "$cinemas"} ,
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme:
"$cinemas.salas.sessoes.idFilme"}}}
]).toArray(callback);
});
}
Código 220
function getMoviesByCityId(cityId, callback){
var objCityId = ObjectId(cityId);
mongodb.connect((err, db) => {
db.collection("cinemaCatalog") .aggregate([
{$match: {"_id": objCityId}},
{$unwind: "$cinemas"} ,
{$unwind: "$cinemas.salas"},
{$unwind: "$cinemas.salas.sessoes"},
{$group: {_id: { filme: "$cinemas.salas.sessoes.filme", idFilme:
"$cinemas.salas.sessoes.idFilme"}}}
]).toArray((err, sessions) => {
if(err) return callback(err, null);
callback(err, sessions.map(i tem => { return {idFilme: item._id.idFilme, filme:
item._id.filme } } ));
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
});
});
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 221
module.exports = { getAllCities, getCinemasByCityId, getMoviesByCityId,
getMoviesByCinemaId, getMovieSessionsByCityId, getMovieSessionsByCinemaId,
disconnect }
Código 222
test('Repository getMoviesByCinemaId', (t) => {
repository.getMoviesByCinemaId(cinemaId, (err, movies) => {
t.assert(!err && movies && movies.length > 0, "Movies By Cinema Id Returned");
t.end();
});
})
Código 223
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
//cinema-catalog.js
module.exports = (app, repository) => {
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 224
//cinema-catalog.test.js
const test = require('tape');
const supertest = require('supertest');
const movies = require('./cinema-catalog');
const server = require("../server/server") ;
const repository = require("../repository/repository");
function runTests(){
repository.disconnect();
server.stop();
})
}
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Código 225
//index.test.js
require("dotenv-safe").config();
require("./config/mongodb.test").runTests();
require("./server/server.test").runTests();
require("./repository/repository.test").runTests();
require("./api/cinema-catalog.test").runTests();
Código 226
//index.js
require("dotenv-safe").config();
const cinemaCatalog = require('. /api/cinema-catalog');
const server = require("./server/server");
const repository = require("./repository/repository");
Código 227
npm install http express morgan helmet express-http-proxy cookie-parser
Código 228
//index.js
var http = require('http');
const express = require('express')
const httpProxy = require(' express-http-proxy')
const app = express()
var cookieParser = require('c ookie-parser');
var logger = require('morgan') ;
const helmet = require('helmet') ;
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
const productsServiceProxy = httpProxy('http://localhost:3002');
// Proxy request
app.get('/users', (req, res, next) => {
userServiceProxy(req, res, next);
})
app.use(logger('dev'));
app.use(helmet());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
Código 229
//index.js
var http = require('http');
const express = require('express')
const httpProxy = require(' express-http-proxy')
const app = express()
var cookieParser = require('c ookie-parser');
var logger = require('morgan') ;
const helmet = require('helmet') ;
// Proxy request
app.get('/users', (req, res, next) => {
userServiceProxy(req, res, next);
})
app.use(logger('dev'));
app.use(helmet());
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
Código 230
npm install jsonwebtoken dotenv-safe
Código 231
# .env.example, commit to repo
SECRET=
Código 232
#.env, don't commit to repo
SECRET=mysecret
Código 233
require("dotenv-safe").config();
var jwt = require('jsonwebtoken');
Código 234
//authentication
app.post('/login', (req, res, next) => {
if(req.body.user === 'luiz' && req.body.pwd === '123'){
//auth ok
const id = 1; //esse id viria do banco de dados
var token = jwt.sign({ id }, process.env.SECRET, {
expiresIn: 300 // expires in 5min
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
} );
res.status(200).send({ auth: true, token: token });
}
res.status(500).send('Login inválido!');
})
Código 235
app.get('/logout', function(req, res) {
res.status(200).send({ auth: false, token: null });
});
Código 236
function verifyJWT(req, res, next){
var token = req.headers['x-access-token'];
if (!token) return res.status(401).send({ auth: false, message: 'No token provided.' });
Código 237
// Proxy request
app.get('/users', verifyJWT, (r eq, res, next) => {
userServiceProxy(req, res, next);
})
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs
Curtiu o livro?
Por favor, deixe a sua review sincera sobre o livro acessando o link abaixo, isso ajuda muito
este humilde autor:
https://www.amazon.com.br/review/create-review/ref=cm_cr_dp_d_wr_but_top?ie=UTF8&ch
annel=glance-detail&asin=B075WQSDZ8
Facebook.com/luiztools
Twitter.com/luiztools
LinkedIn.com/in/luizfduartejr
Quer fazer um curso online de Node.js e MongoDB com o autor deste livro? Acesse http://www.luiztools.com.br/curso-nodejs