Sunteți pe pagina 1din 51

Workshop de Node.

js
Apresentao
Por que Node.js?
Ambiente
Hello World!
Cronograma
CRUD
Referncias
Dvidas
Cincia da Computao
Computao Mvel
Dev, analista, gerente...
11 anos programando
- 10 com Java e C#
- alguns meses com Node.js ...
Por que Node.js???
Vantagens:
multiplataforma, veloz, escala, velocidade e baixo custo, web
full-stack, assncrono, V8 Engine, Javascript

Por que Node.js? Desvantagens:


single thread, Javascript

Cenrios de Usos:
APIs, bots, mensageria, real-time, games, collaboration tools
Quem usa?
Netflix, PayPal, LinkedIn, Groupon, Dow Jones, GoDaddy, 4all, etc

Tecnologias Concorrentes:
Por que Node.js? Go, Elixir e Scala
Ambiente
Onde baixo?
http://nodejs.org

Como verifico se est funcionando?


Node.js 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
Onde baixo?
http://mongodb.org

Como verifico se est funcionando?


MongoDB C:\mongo\bin> mongod --dbpath C:\mongo\data

O que mais vou precisar?


GUI Mongo: http://studio3t.com (opcional)
Hello World!
Criando um projeto Express:
C:\nodejs> express helloworld

Executando um projeto Express:


Hello World! C:\nodejs\helloworld> npm start

Acessando um projeto Express:


http://localhost:3000
Estrutura de pastas:
bin, node_modules, public, routes e views.

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

Objetos importantes:
app, http, server
Instalando dependncia do EJS:
C:\nodejs\helloworld> npm i -S ejs

Configurando a view engine:


Alterando... - alterar app.js
- renomear views para .ejs
- escrever HTML
Nova rota:
routes/cadastro.js

Nova view:
Novo teste views/cadastro.ejs
CRUD
(Create, Read, Update, Delete)
ORM:
Mongoose

Configurao:
Configurando C:\nodejs\helloworld> npm i -S mongoose
C:\nodejs\helloworl> nano db.js
db.js:
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/helloworld");

Configurando var customerSchema = new mongoose.Schema({


nome: String,
idade: Number
}, { collection: 'customers' });

module.exports = { Mongoose: mongoose,


CustomerSchema: customerSchema }
routes/cadastro.js (POST):

var db = require("../db");
var nome = req.body.txtNome;
Create 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("/"); }
});
});
Funcionou?
C:\mongo\bin> mongo
use database
db.collection.find().prety()
Create
routes/index.js (GET):

var db = require("../db");
var customers = db.Mongoose.model('customers',
Read db.CustomerSchema, 'customers');
customers.find({}).lean().exec(
function (e, docs) {
res.render('index', { "title": "Express", "customers": docs });
});
views/index.ejs:

<ul>
<% customers.forEach(function(customer){ %>
Read <li><%= customer.nome %> tem <%= customer.idade %>
anos</li>
<% }); %>
</ul>
views/index.ejs:

<ul>
<% customers.forEach(function(customer){ %>
Update <li><a href="/cadastro/<%= customer._id%>"><%=
customer.nome %> tem <%= customer.idade %> anos</a></li>
<% }); %>
</ul>
routes/cadastro.js (GET):

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


...
Update }
routes/cadastro.js (GET):

if(req.params.id){
var db = require('../db');
Update 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] });
});
}
routes/cadastro.js (GET):

else {
res.render('cadastro', { title: 'Express', customer: {nome:"",
Update idade:"", _id:""} });
}
views/cadastro.ejs:

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


name="txtNome" value="<%= customer.nome %>"
Update /></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 %>"/>


routes/cadastro.js (POST):

var db = require("../db");
var nome = req.body.txtNome;
Update var idade = req.body.txtIdade;

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


db.CustomerSchema, 'customers');
routes/cadastro.js (POST):

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


var customer = new Customer({ nome: nome, idade: idade });
Update customer.save(function (err) {
if (err) {
console.log("Error! " + err.message);
return err;
}
else {
console.log("Post saved");
res.redirect("/");
}
});
}
routes/cadastro.js (POST):

else {
Customer.findOneAndUpdate({ _id: req.body.id },
Update { nome: nome, idade: idade },
{ upsert: false },
function (err, doc) {
if (err) {
console.log("Error! " + err.message);
return err;
}
console.log("Post saved");
res.redirect("/");
});
}
views/cadastro.ejs:

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


<% if(customer._id !== "") { %>
Delete <a href="/excluir/<%= customer._id %>" onclick="return
confirm('Tem certeza que deseja excluir este cliente?');">
Excluir</a>
<% } %>
</p>
views/index.ejs:

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


<li><a href="/cadastro/<%= customer._id%>"><%=
Delete 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>
<% }); %>
routes/excluir.js (GET):

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


var db = require('../db');
Delete 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('/');
});
});
Referncias
Dvidas?
Obrigado!

S-ar putea să vă placă și