今天正好公司停电,放假一天,准备听课封装一下用nodejs操作 MongoDB数据库的方法来着,
然后我就掉坑里了
记录一下吧
首先说一下环境,我用的是nodejs 操作MongoDB数据库用的包是mongodb
第一步,按部就班的写一下,找到数据库和集合,准备操作;
// 加载mongodb包
var mongodb = require("mongodb");
// 连接客户端
var mongoClient = mongodb.MongoClient;
// 准备地址
var url = "mongodb://127.0.0.1:27017";
// 连接客户端
mongoClient.connect(url, function (err, client) {
// 检测错误
if (err) {
console.log("** 数据库连接失败 **");
} else {
console.log("** 数据库连接成功 **");
// 操作
var db = client.db("db1811"); // 数据库
var collection = db.collection("person"); // 集合
// 增删改查操作
client.close(); // 关闭连接
}
})
二、我将查询数据的方法,抽取出来了
方法说明:
参数1 是集合对象,也就是要查询的集合;
参数2 是查询的条件对象;
参数3 是连接到的客户端对象
我想的是,在调用我这个方法的时候,生成一个对象,然后不管查询的结果如何,都在我这个对象中有所体现
比如说,我查询失败,对象中就会存储失败的状态码和失败信息,成功的话就会存储成功的状态码和查询到的数据
如:
失败 - ret = {state:0 , content:" err信息 "}
成功 - 有数据 - ret = {state:1 , content : [{.. , ..}] }
- 无数据 - ret = {state:1 , content : "** 暂无数据 **"}
然后在外边就可以根据返回的数据进行操作了;
/**
* DataFind() 查询数据
* @param {*} collection 集合对象
* @param {*} data 查询条件
* @param {*} client 客户端对象
* 返回值是一个对象 {state:状态码 0-失败 1-成功,content:"错误原因/查到的数据"}
*/
var DataFind = function (collection, data, client) {
var ret = {};
collection.find(data).toArray(function (err, result) {
if (err) {
ret.statea = 0;
ret.content = err;
} else {
if (result.length > 0) {
ret.statea = 1;
ret.content = result;
} else {
ret.statea = 1;
ret.content = "** 暂无数据 **";
}
}
client.close();
});
return ret;
}
使用如下:
打印出的结果如下:
没拿到数据;
我的分析如下:
我封装的方法里面用到的这个查询方法是异步执行的,也就是当我执行这个封装方法的时候,执行就直接
var ret = {};
return ret;
中间的代码,暂时没执行,因为同步代码和异步代码在一起的时候,先执行同步代码;
所以返回出来的是个空的对象,里边查询出来的数据是 undefined
然后,我这个问题现在还没解决,求大神解救;
跪谢 ! ! !