NodeJS Mongo Programming

Connection

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var model = mongoose.model(modelname, Schema);
mongoose.connect('mongodb://localhost/mydata');  // host/databasename

To run this

Schema is Mongoose unique object


CRUD

Add routes for GET and POST
All operation codes are in index.js

Create

Add Route(app.js)
app.get('/', routes.index);
app.post('/', routes.index_post);
index.jade(FORM)

This is form page.
Submit to post method to root(/)

extends layout

block content
  h1= title
  p Welcome to #{title}
  p#msg #{msg}
  
  form(action='/',method='post')
    input(type='text',name='name')
    br
    input(type='text',name='mail')
    br
    input(type='text', name='memo')
    br
    input(type='submit', value='send')
  hr
  table(border='1')
    tr
      th Name
      th Mail
      th memo
      each data in datas
        tr
          td= data.name
          td= data.mail
          td= data.memo
index.js(GET,POST)
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var mydataSchema = new Schema({
	'name' : String,
	'mail' : String,
	'memo' : String
});
var MyData =  mongoose.model('mydata', mydataSchema); // mydatas?, small letter
var db = mongoose.connect('mongodb://localhost/mydb');

exports.index = function(req, res){
  MyData.find(function(err, docs) {
    if (err) {
      console.log(err);
    }
    console.log(docs);
    res.render('index', { 
      title: 'Express',
      msg : 'List',
      datas : docs
    });
  });
};

exports.index_post = function(req, res) {
  var name = req.body.name;
  var mail = req.body.mail;
  var memo = req.body.memo;
  
  var data = new MyData({
    'name' : name,
    'mail' : mail,
    'memo' : memo
  });
  data.save(function(err){
    if (err) {
      console.log(err);
    }
    res.redirect('/');
  });
};

UPDATE

app.js
app.get('/edit/:id', routes.edit);
app.post('/update', routes.update);
edit.jade
extends layout

block content
  h1= title
  p Welcome to #{title}
  p#msg #{msg}
  form(method='post',action='/update')
    input(type='hidden',name='id',value='#{data._id}')
    table
      tr
        td Name
        td
          input(type='text', name='name', value='#{data.name}')
      tr
        td Mail
        td 
          input(type='text', name='mail', value='#{data.mail}')
      tr
        td Memo
        td 
          input(type='text', name='memo', value='#{data.memo}')
      tr
        td
        td
          input(type='submit', value='Submit')
index.js(GET, POST)
/*
* Edit, Update
*/
exports.edit = function(req, res) {
  var id = req.params.id;
  MyData.findOne({
    '_id' : id
  }, function(err, doc){
    if (err) {
      console.log(err);
    }
    res.render('edit',{
      title : 'Express',
      msg : 'Update data',
      data : doc
    });
  });
};

exports.update = function(req, res) {
  var id = req.body.id;
  var name = req.body.name;
  var mail = req.body.mail;
  var memo = req.body.memo;
  MyData.findOne({
    '_id' : id
  }, function(err, doc) {
    if (err) {
      console.log(err);
    }
    doc.name = name;
    doc.mail = mail;
    doc.memo = memo;
    doc.save(function(err) {
      if (err) {
        console.log(err);
      }
      res.redirect('/'); // Go to top
    });
  });
};

Delete

Routing /delete, /remove

app.js
app.get('/delete/:id', routes.del);
app.post('/remove', routes.remove);
delete.jade

This shows data and delete button

extends layout

block content
  h1= title
  p Welcome to #{title}
  p#msg #{msg}
  p= 'name:' + data.name
  form(method='post',action='/remove')
    input(type='hidden', name='id', value='#{data._id}')
    input(type='submit', value='Delete')
index.js
exports.edit = function(req, res) {
  var id = req.params.id;
  MyData.findOne({
    '_id' : id
  }, function(err, doc){
    if (err) {
      console.log(err);
    }
    res.render('edit',{
      title : 'Express',
      msg : 'Update data',
      data : doc
    });
  });
};

exports.update = function(req, res) {
  var id = req.body.id;
  var name = req.body.name;
  var mail = req.body.mail;
  var memo = req.body.memo;
  MyData.findOne({
    '_id' : id
  }, function(err, doc) {
    if (err) {
      console.log(err);
    }
    doc.name = name;
    doc.mail = mail;
    doc.memo = memo;
    doc.save(function(err) {
      if (err) {
        console.log(err);
      }
      res.redirect('/');
    });
  });
};
Link to delete
a(href="/delete/#{data._id}")= 'Delete'