今天正好公司停电,放假一天,准备听课封装一下用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 : [{.. , ..}] }
然后在外边就可以根据返回的数据进行操作了;
/** * 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
然后,我这个问题现在还没解决,求大神解救;
跪谢 ! ! !
文章来源: JS回调函数是异步调用 记录踩到的坑