Workshop Node.js + MongoDB

Click here to load reader

  • date post

    14-Apr-2017
  • Category

    Internet

  • view

    80
  • download

    2

Embed Size (px)

Transcript of Workshop Node.js + MongoDB

  • Workshop de Node.js

  • Apresentao

    Por que Node.js?

    Ambiente

    Hello World!

    CRUD

    Referncias

    Dvidas

    Cronograma

  • 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???

  • Por que Node.js?

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

    full-stack, assncrono, V8 Engine, Javascript

    Desvantagens:single thread, Javascript

    Cenrios 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)

    http://studio3t.com

  • 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 dependncia 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

    Configurao: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:

    tem

    anos

  • Update

    views/index.ejs:

    tem anos

  • 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:

    Nome:

    Idade:

  • 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:

    Excluir

  • Delete

    views/index.ejs:

    tem anos

    [X]

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

    });

    });

  • Referncias

  • Dvidas?

  • Obrigado!