今天正好公司停電,放假一天,準備聽課封裝一下用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
然後,我這個問題現在還沒解決,求大神解救;
跪謝 ! ! !