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'
