数据库操作总要伴随着繁复的连接操作,所以简单的封装了一下,使用起来还是比较简单好用的,需要先安装 mongodb 模块。
好消息:本轮子已加入 npm → promise-mongodb (后来我发现有个现成的非常强大的库 mongoose,我自己瞎写的小破轮子就忽略吧哈哈哈)
使用 Promise
/**
* Update by 喻建博 on 2017/7/29.
* http://blog.csdn.net/zmhawk/article/details/74379470
*/
// mangoDB 数据库模块
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = null;
/**
* 数据库连接函数
* @param collectionName 集合的名字
*/
function connect(collectionName) {
return new Promise((resolve, reject) => {
MongoClient.connect(DB_CONN_STR, function (err, db) {
console.log("连接成功!");
//连接到表
var collection = db.collection(collectionName);
resolve({collection, db});
});
})
}
/**
*
* @param op 操作的名字
* @returns {Function}
*/
function operation(op) {
/**
* @param collectionName 要操作的 collection 的名字
* @param data1 第一组参数,根据操作不同含义不同
* @param data2 第二组参数,根据操作不同含义不同
*/
return function (collectionName, data1, data2) {
return new Promise((resolve, reject) => {
connect(collectionName).then(({ collection, db }) => {
switch (op) {
case 'insert': {
// data1 为要插入的数据
collection.insert(data1, returnResult)
break;
}
case 'update': {
// data1 为查询参数
// data2 为修改参数
collection.update(data1, data2, returnResult)
break;
}
case 'find': {
// data1 为查询参数
collection.find(data1).toArray(returnResult)
break;
}
case 'remove': {
// 为查询参数
collection.remove(data1, returnResult)
break;
}
}
function returnResult(err, result) {
if (err) {
reject(err);
return;
}
resolve(result);
db.close();
}
})
})
}
}
/**
* 初始化方法
* @param str // 数据库连接的字符串
*/
function init(str) {
DB_CONN_STR = str;
}
/**
*
* @module
*/
module.exports = {
insert: operation('insert'),
find: operation('find'),
update: operation('update'),
remove: operation('remove'),
init: init,
getCollection: connect // 获取数据库连接,方便自定义复杂的查询操作
};
使用方法举例:
var mongodb = require('./mongo');
mongodb.init('mongodb://localhost:27017/test');
mongodb.insert('user', {username: "嘿嘿嘿354435243", password: "123456"}).then((data) => {
console.log(data)
}, (err) => {
console.log(err)
});
mongodb.update('user', {username: "嘿嘿嘿354435243"}, {$set: {username: "我改了", password: "123456"}}).then((data) => {
console.log(data)
}, (err) => {
console.log(err)
});
mongodb.find('user', {username: "嘿嘿嘿"}).then((data) => {
console.log(data)
}, (err) => {
console.log(err)
});
mongodb.remove('user', {username: "嘿嘿嘿22222"}).then((data) => {
console.log(data)
}, (err) => {
console.log(err)
});
上面是更新后的代码,更简洁。
下面是之前的代码,纯回调。
/**
* Created by 喻建博 on 2017/7/4.
* http://blog.csdn.net/zmhawk/article/details/74379470
*/
// mangoDB 数据库模块
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = null;
/**
* 数据库连接函数
* @param collectionName 集合的名字
* @param callback 连接成功后的回调函数
*/
function connect(collectionName, callback) {
MongoClient.connect(DB_CONN_STR, function (err, db) {
// console.log("连接成功!");
//连接到表
var collection = db.collection(collectionName);
callback(collection, db);
});
}
/**
* 插入文档的方法
* @param collectionName {String} // 集合的名字
* @param data {Object | Array} // 要插入的数据
* @param callback {Function} // 回调函数
*/
function insert(collectionName, data, callback) {
connect(collectionName, function (collection, db) {
collection.insert(data, function (err, result) {
if (err) {
console.log('Error:' + err);
return;
}
callback(result);
db.close();
});
})
}
/**
* 更新文档方法
* @param collectionName // 集合的名字
* @param whereStr // 查询的数据
* @param updateStr // 更新的数据
* @param callback // 回调函数
*/
function update(collectionName, whereStr, updateStr, callback) {
connect(collectionName, function (collection, db) {
collection.update(whereStr,updateStr, function (err, result) {
if (err) {
console.log('Error:' + err);
return;
}
callback(result);
db.close();
});
})
}
/**
* @description 查询文档方法
* @param collectionName // 集合的名字
* @param data // 要查询的数据
* @param callback // 回调函数
*/
function find(collectionName, data, callback) {
// var start = process.hrtime()[1];
connect(collectionName, function (collection, db) {
// var end = process.hrtime()[1];
// console.log("连接耗时:" + (end - start));
collection.find(data).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
db.close();
});
})
}
/**
* 删除文档方法
* @param collectionName // 集合的名字
* @param data // 要查询的数据
* @param callback // 回调函数
*/
function remove(collectionName, data, callback) {
connect(collectionName, function (collection, db) {
collection.remove(data).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
db.close();
});
})
}
/**
* 删除文档方法
* @param str // 数据库连接的字符串
*/
function setConnect(str) {
DB_CONN_STR = str;
}
/**
*
* @module
*/
module.exports = {
insert: insert,
find: find,
update: update,
remove: remove,
setConnect: setConnect,
getCollection: connect // 获取数据库连接,方便自定义复杂的查询操作
};
使用方法如下
var mongodb = require('./mongo'); // require里的路径根据你把这个自定义模块放哪了而定
mongodb.setConnect('mongodb://localhost:27017/test'); // 设置数据库连接参数
mongodb.insert('user', {
username: "嘿嘿嘿",
password: "123456"
}, function (result) {
// result 为操作成功后的返回值
});
mongodb.find('user', {username: "嘿嘿嘿"}, function (result) {
});
mongodb.update('user', {
username: username,
password: password
}, {
$set: {authToken: authToken}
}, function (result) {
});
// 还有个删除,和查询操作一样,不举例了。
// 也可以通过 `getCollection()` 来或许连接函数,自定义复杂的操作
mongodb.getConnect("user", function (collection, db) {
collection.remove(data).toArray(function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
// code
// ...
db.close();
});
);