workshop node.js + mongodb

Post on 14-Apr-2017

99 Views

Category:

Internet

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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!

top related