var util = require('util');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var dburl = 'mongodb://localhost/chap06'; //dburl用于连接已运行的MongoDB
exports.connect = function(callback){
mongoose.connect(dburl);
}
exports.disconnect = function(callback){
mongoose.disconnect(callback);
}
exports.setup = function(callback){callback(null);}
//定义模式
var NoteSchema = new Schema({
ts: {type: Date, default: Date.now}, //默认值
author: String,
note: String
});
//将NoteSchema作为Mongoose的模型注册进去
mongoose.model('Note', NoteSchema);
var Note = mongoose.model('Note');
exports.emptyNote = {"_id": "", author: "", note: ""};
exports.add = function(author, note, callback){
var newNote = new Note();
newNote.author = author;
newNote.note = note;
newNote.save(function(err){
if (err){
util.log('FATAL ' + err);
callback(err);
} else {
callback(null);
}
});
}
exports.delete = function(id, callback){
exports.findNoteById(id, function(err, doc){
if (err){
callback(err);
} else {
util.log(util.inspect(doc));
doc.remove();
callback(null);
}
});
}
exports.edit = function(id, author, note, callback){
exports.findNoteById(id, function(err, doc){
if (err){
callback(err);
} else {
doc.ts = new Date();
doc.author = author;
doc.note = note;
doc.save(function(err){
if (err){
util.log('FATAL ' + err);
callback(err);
} else {
callback(null);
}
});
}
});
}
exports.allNotes = function(callback){
Note.find({}, callback);
}
exports.forAll = function(doEach, done){
Note.find({}, function(err, docs){
if (err){
util.log('FATAL ' + err);
done(err, null);
}
docs.forEach(function(doc){
doEach(null, doc);
});
done(null);
});
}
/*
_id字段是MongoDB提供的全局唯一的ID,用于标识存储的文档
*/
var findNoteById = exports.findNoteById = function(id, callback){
Note.findOne({_id: id}, function(err, doc){
if (err){
util.log('FATAL ' + err);
callback(err, null);
}
callback(null, doc);
});
}app.js
//在数据库需要放置在一台计算机上时,应该考虑使用SQLite3
//控制器,在nodesdb-sqlite3.js和notesdb-mongoose.js模块之间切换
var util = require('util');
var url = require('url');
var express = require('express');
var nmDbEngine = 'sqlite3'; //用于命名数据库引擎、选择合适的notesdb实现和选择合适的views目录









