workshop node.js + mongodb
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!