Workshop Node.js + MongoDB

Post on 14-Apr-2017

96 views 2 download

Transcript of Workshop Node.js + MongoDB

Workshop de Node.js

Apresentação

Por que Node.js?

Ambiente

Hello World!

CRUD

Referências

Dúvidas

Cronograma

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 ...

Por que Node.js???

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

Por que Node.js?

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

Tecnologias Concorrentes:Go, Elixir e Scala

Ambiente

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

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)

Hello World!

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

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

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

Novo teste

Nova rota:routes/cadastro.js

Nova view:views/cadastro.ejs

CRUD(Create, Read, Update, Delete)

Configurando

ORM:Mongoose

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

C:\nodejs\helloworl> nano db.js

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 }

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("/"); }

});

});

Create

Funcionou?C:\mongo\bin> mongo

use database

db.collection.find().prety()

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 });

});

Read

views/index.ejs:

<ul>

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

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

anos</li>

<% }); %>

</ul>

Update

views/index.ejs:

<ul>

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

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

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

<% }); %>

</ul>

Update

routes/cadastro.js (GET):

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

...

}

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] });

});

}

Update

routes/cadastro.js (GET):

else {

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

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

}

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 %>"/>

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');

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("/");

}

});

}

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("/");

});

}

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>

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>

<% }); %>

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('/');

});

});

Referências

Dúvidas?

Obrigado!