<body>
<h3>设计模式知识连载(39)---数据访问对象模式:</h3>
<p>
抽象和封装对数据源的访问和存储,DAO通过对数据源链接的管理方便对数据的访问与存储
</p>
<hr>
<script type="text/javascript">
/**
* 案例二:MongoDB,方式一:初始
*/
// 在nodejs中写入配置项
/* config.js*/
// 将配置数据输出
module.exports = {
// 数据库相关配置数据
DB : {
db : 'demo', // 数据库名称
host : 'localhost', // 主机名
port : 27017 // 端口号
}
}
// 链接MongoDB
/* db.js */
// 引用mongodb模块
var mongodb = require('mongodb') ;
// 引用配置模块的数据库配置信息
var config = require('./config') ;
var _DB = config.DB ;
// 创建数据库对象
var d = new mongodb.Db(
_DB.db, // 数据库名称
new mongodb.Server(
_DB.host, // 主机名
_DB.port, // 端口
{auto_reconnect : true} // 自动链接
),
{safe : true} // 安全模式
) ;
// 输出数据访问对象
exports.DB = function(){} ;
// 操作集合
/***
* 打开数据库, 操作集合
* @param col 集合名
* @param fn 操作方法
**/
function connect(col, fn) {
// 打开数据库
DB.open(function(err, db) {
// 打开数据库报错则抛出错误
if(err) {
throw err ;
// 没报错,就操作集合
}else {
db.collection(col, function(err, col) {
// 打开数据库报错则抛出错误
if(err) {
throw err ;
// 没报错,就操作集合
}else {
fn && fn(col, db) ;
}
}) ;
}
}) ;
}
// 要执行的增删改查操作要在connect的fn中实现
exports.DB = function(col) {
return {
/***
* 插入数据
* @param data 插入数据项
* @param success 操作成功回调函数
* @param fail 操作失败回调函数
***/
insert : function(data, success, fail) {
// 打开数据库操作col集合
connect(col, function(col, db) {
// 向集合中插入数据
col.insert(data, function(err, docs) {
// 失败,则抛出插入错误
if(err) {
fail && fail(err) ;
// 成功,则执行成功回调函数
}else {
success && success(docs) ;
}
// 关闭数据库
db.close() ;
}) ;
}) ;
},
/***
* 删除数据
* @param data 删除数据项
* @param success 操作成功回调函数
* @param fail 操作失败回调函数
***/
remove : function(data, success, fail) {
// 打开数据库操作col集合
connect(col, function(col, db) {
// 删除集合中的数据
col.remove(data, function(err, len) {
// 失败,则抛出删除错误
if(err) {
fail && fail(err) ;
// 成功,则执行成功回调函数
}else {
success && success(len) ;
}
// 关闭数据库
db.close() ;
}) ;
}) ;
},
/***
* 查找数据
* @param con 查找条件
* @param success 操作成功回调函数
* @param fail 操作失败回调函数
***/
find : function(con, success, fail) {
// 打开数据库操作col集合
connect(col, function(col, db) {
// 在集合中查找数据
col.find(con).toArray(function(err, docs) {
// 失败,则抛出查找错误
if(err) {
fail && fail(err) ;
// 成功,则执行成功回调函数
}else {
success && success(docs) ;
}
// 关闭数据库
db.close() ;
}) ;
}) ;
},
/***
* 更新数据
* @param con 筛选条件
* @param data 更新数据项
* @param success 操作成功回调函数
* @param fail 操作失败回调函数
***/
updata : function(con, data, success, fail) {
// 打开数据库操作col集合
connect(col, function(col, db) {
// 在集合中更新数据
col.updata(con, data, function(err, len) {
// 失败,则抛出更新错误
if(err) {
fail && fail(err) ;
// 成功,则执行成功回调函数
}else {
success && success(len) ;
}
// 关闭数据库
db.close() ;
}) ;
}) ;
}
}
} ;
// 实例操作
/* test.js */
var db = require('./db') ; // 引用数据访问对象模块
var DB = db.DB ;
// 操作user集合
var user = DB('user') ;
// 向集合中插入一条数据
user.insert({
name : '小白', nick : '雨打芭蕉'
}, function(docs) {
console.log(docs) ;
}) ;
// 删除
user.remove({name : '小白'}, function(len) {
console.log(len) ; // 1 (删除数据项长度)
}) ;
// 查找
user.find({name : '小白'}, function(docs) {
console.log(docs) ;
}) ;
// 更新
user.updata({name : '小白'}, {name : '小白', nick : '雨夜'}, function(len) {
console.log(len) ; // 1 (更新的数据项长度)
}) ;
// 操作书籍集合
var book = DB('book') ;
book.insert({title : 'JavaScript设计模式', type : 'javascript'}) ;
</script>
</body>
设计模式知识连载(39)---数据访问对象模式---MongoDB
最新推荐文章于 2022-05-06 10:54:42 发布