Workshop Node.js + MongoDB

51

Transcript of Workshop Node.js + MongoDB

Page 1: Workshop Node.js + MongoDB
Page 2: Workshop Node.js + MongoDB
Page 3: Workshop Node.js + MongoDB

Workshop de Node.js

Page 4: Workshop Node.js + MongoDB

Apresentação

Por que Node.js?

Ambiente

Hello World!

CRUD

Referências

Dúvidas

Cronograma

Page 5: Workshop Node.js + MongoDB

Ciência da Computação

Computação Móvel

Dev, analista, gerente...

11 anos programando

- 10 com Java e C#

- alguns meses com Node.js ...

Page 6: Workshop Node.js + MongoDB

Por que Node.js???

Page 7: Workshop Node.js + MongoDB

Por que Node.js?

Vantagens:multiplataforma, veloz, escala, velocidade e baixo custo, web

full-stack, assíncrono, V8 Engine, Javascript

Desvantagens:single thread, Javascript

Cenários de Usos:APIs, bots, mensageria, real-time, games, collaboration tools

Page 8: Workshop Node.js + MongoDB

Por que Node.js?

Quem usa?Netflix, PayPal, LinkedIn, Groupon, Dow Jones, GoDaddy, 4all, etc

Tecnologias Concorrentes:Go, Elixir e Scala

Page 9: Workshop Node.js + MongoDB

Ambiente

Page 10: Workshop Node.js + MongoDB
Page 11: Workshop Node.js + MongoDB

Node.js

Onde baixo?http://nodejs.org

Como verifico se está funcionando?node -v

O que mais vou precisar?sudo npm install -g express

sudo npm i -g express-generator

sudo npm i -g ejs mongoose

//pode instalar depois

Page 12: Workshop Node.js + MongoDB
Page 13: Workshop Node.js + MongoDB

MongoDB

Onde baixo?http://mongodb.org

Como verifico se está funcionando?C:\mongo\bin> mongod --dbpath C:\mongo\data

O que mais vou precisar?GUI Mongo: http://studio3t.com (opcional)

Page 14: Workshop Node.js + MongoDB

Hello World!

Page 15: Workshop Node.js + MongoDB

Hello World!

Criando um projeto Express:C:\nodejs> express helloworld

Executando um projeto Express:C:\nodejs\helloworld> npm start

Acessando um projeto Express:http://localhost:3000

Page 16: Workshop Node.js + MongoDB
Page 17: Workshop Node.js + MongoDB

Explicando...

Estrutura de pastas:bin, node_modules, public, routes e views.

Arquivos importantes:bin/www, app.js e packages.json

Objetos importantes:app, http, server

Page 18: Workshop Node.js + MongoDB

Alterando...

Instalando dependência do EJS:C:\nodejs\helloworld> npm i -S ejs

Configurando a view engine:- alterar app.js

- renomear views para .ejs

- escrever HTML

Page 19: Workshop Node.js + MongoDB

Novo teste

Nova rota:routes/cadastro.js

Nova view:views/cadastro.ejs

Page 20: Workshop Node.js + MongoDB
Page 21: Workshop Node.js + MongoDB

CRUD(Create, Read, Update, Delete)

Page 22: Workshop Node.js + MongoDB

Configurando

ORM:Mongoose

Configuração:C:\nodejs\helloworld> npm i -S mongoose

C:\nodejs\helloworl> nano db.js

Page 23: Workshop Node.js + MongoDB

Configurando

db.js:var mongoose = require("mongoose");

mongoose.connect("mongodb://localhost:27017/helloworld");

var customerSchema = new mongoose.Schema({

nome: String,

idade: Number

}, { collection: 'customers' });

module.exports = { Mongoose: mongoose,

CustomerSchema: customerSchema }

Page 24: Workshop Node.js + MongoDB

Create

routes/cadastro.js (POST):

var db = require("../db");

var nome = req.body.txtNome;

var idade = req.body.txtIdade;

var Customer = db.Mongoose.model('customers',

db.CustomerSchema, 'customers');

var customer = new Customer({ nome: nome, idade: idade });

customer.save(function (err) {

if (err) { return err; }

else { res.redirect("/"); }

});

});

Page 25: Workshop Node.js + MongoDB

Create

Funcionou?C:\mongo\bin> mongo

use database

db.collection.find().prety()

Page 26: Workshop Node.js + MongoDB
Page 27: Workshop Node.js + MongoDB

Read

routes/index.js (GET):

var db = require("../db");

var customers = db.Mongoose.model('customers',

db.CustomerSchema, 'customers');

customers.find({}).lean().exec(

function (e, docs) {

res.render('index', { "title": "Express", "customers": docs });

});

Page 28: Workshop Node.js + MongoDB

Read

views/index.ejs:

<ul>

<% customers.forEach(function(customer){ %>

<li><%= customer.nome %> tem <%= customer.idade %>

anos</li>

<% }); %>

</ul>

Page 29: Workshop Node.js + MongoDB
Page 30: Workshop Node.js + MongoDB

Update

views/index.ejs:

<ul>

<% customers.forEach(function(customer){ %>

<li><a href="/cadastro/<%= customer._id%>"><%=

customer.nome %> tem <%= customer.idade %> anos</a></li>

<% }); %>

</ul>

Page 31: Workshop Node.js + MongoDB
Page 32: Workshop Node.js + MongoDB

Update

routes/cadastro.js (GET):

router.get('/:id?', function(req, res, next) {

...

}

Page 33: Workshop Node.js + MongoDB

Update

routes/cadastro.js (GET):

if(req.params.id){

var db = require('../db');

var customers = db.Mongoose.model('customers',

db.CustomerSchema, 'customers');

customers.find({ _id: req.params.id }).lean().exec(function (e,

docs) {

res.render('cadastro', { title: 'Express', customer: docs[0] });

});

}

Page 34: Workshop Node.js + MongoDB

Update

routes/cadastro.js (GET):

else {

res.render('cadastro', { title: 'Express', customer: {nome:"",

idade:"", _id:""} });

}

Page 35: Workshop Node.js + MongoDB

Update

views/cadastro.ejs:

<p><label for="txtNome">Nome: <input type="text"

name="txtNome" value="<%= customer.nome %>"

/></label></p>

<p><label for="txtIdade">Idade: <input type="number"

name="txtIdade" value="<%= customer.idade %>" /></label></p>

<input type="hidden" name="id" value="<%= customer._id %>"/>

Page 36: Workshop Node.js + MongoDB
Page 37: Workshop Node.js + MongoDB

Update

routes/cadastro.js (POST):

var db = require("../db");

var nome = req.body.txtNome;

var idade = req.body.txtIdade;

var Customer = db.Mongoose.model('customers',

db.CustomerSchema, 'customers');

Page 38: Workshop Node.js + MongoDB

Update

routes/cadastro.js (POST):

if(req.body.id === "") {

var customer = new Customer({ nome: nome, idade: idade });

customer.save(function (err) {

if (err) {

console.log("Error! " + err.message);

return err;

}

else {

console.log("Post saved");

res.redirect("/");

}

});

}

Page 39: Workshop Node.js + MongoDB

Update

routes/cadastro.js (POST):

else {

Customer.findOneAndUpdate({ _id: req.body.id },

{ nome: nome, idade: idade },

{ upsert: false },

function (err, doc) {

if (err) {

console.log("Error! " + err.message);

return err;

}

console.log("Post saved");

res.redirect("/");

});

}

Page 40: Workshop Node.js + MongoDB
Page 41: Workshop Node.js + MongoDB

Delete

views/cadastro.ejs:

<p><input type="submit" value="Salvar" />

<% if(customer._id !== "") { %>

<a href="/excluir/<%= customer._id %>" onclick="return

confirm('Tem certeza que deseja excluir este cliente?');">

Excluir</a>

<% } %>

</p>

Page 42: Workshop Node.js + MongoDB
Page 43: Workshop Node.js + MongoDB

Delete

views/index.ejs:

<% customers.forEach(function(customer){ %>

<li><a href="/cadastro/<%= customer._id%>"><%=

customer.nome %> tem <%= customer.idade %> anos</a>

<a href="/excluir/<%= customer._id %>" onclick="return

confirm('Tem certeza que deseja excluir este cliente?');">[X]</a>

</li>

<% }); %>

Page 44: Workshop Node.js + MongoDB
Page 45: Workshop Node.js + MongoDB

Delete

routes/excluir.js (GET):

router.get('/:id', function(req, res, next) {

var db = require('../db');

var customers = db.Mongoose.model('customers',

db.CustomerSchema, 'customers');

customers.find({ _id: req.params.id }).remove(function (err) {

if(err){

console.log("Error! " + err.message);

return err;

}

res.redirect('/');

});

});

Page 46: Workshop Node.js + MongoDB
Page 47: Workshop Node.js + MongoDB

Referências

Page 48: Workshop Node.js + MongoDB
Page 49: Workshop Node.js + MongoDB
Page 50: Workshop Node.js + MongoDB

Dúvidas?

Page 51: Workshop Node.js + MongoDB

Obrigado!