2015-08-13 30 views
0
var connection_string = 'localdb'; //local db by default 

var mongojs = require('mongojs'); 
var collections = ['projects', 'homeAnimationData']; 
var db = mongojs(connection_string, collections); 

db.homeAnimationData.save({image: '/imagea', width: '200px'}, function(err, saved) { 
    if(err || !saved) console.log('not saved'); 
    else console.log('Saved'); 
});  

db.homeAnimationData.find({}).limit(10).forEach(function(err, doc) { 
    if (err) throw err; 
    if (doc) { 
     console.dir(doc); 
    } 
}); 

沒有控制檯在nodejs應用程序中工作,我沒有收到任何錯誤?mongojs沒有在做CRUD操作

回答

0

我認爲你實際上是在調用db.close(),但沒有告訴我們你的問題。那麼,以及在您訪問.find()數據時沒有看到輸出的情況主要是這裏的方法是「異步」的問題,並且您需要「等待」您想要的回調執行。

此處的.forEach()方法應該「謹慎」使用,因爲它幾乎從來不是您真正想要的產品代碼。下面是從"async"庫有點異步流控制幫助工作正常,同樣的事情:

var localdb = 'localdb', 
    async = require('async'), 
    mongojs = require('mongojs'), 
    collections = ['projects','homeAnimationData'], 
    db = mongojs(localdb,collections); 


async.series(
    [ 
    function(callback) { 
     db.homeAnimationData.remove({},callback); 
    }, 
    function(callback) { 
     var data = { "image": "/imagea", "width": "200px" }; 
     db.homeAnimationData.save(data,function(err,saved) { 
     if (err) callback(err); 
     console.log('Saved'); 
     callback(); 
     }); 
    }, 
    function(callback) { 
     db.homeAnimationData.find({}).limit(10).toArray(function(err,docs) { 
     if (err) callback(err); 
     console.dir(docs); 
     callback(); 
     }); 
    } 
    ], 
    function(err) { 
    if (err) throw err; 
    db.close(); 
    } 
); 

或者交替進行,調用.toArray()方法,你可以使用"stream"接口,它是原生提供:

var localdb = 'localdb', 
    async = require('async'), 
    mongojs = require('mongojs'), 
    collections = ['projects','homeAnimationData'], 
    db = mongojs(localdb,collections); 


async.series(
    [ 
    function(callback) { 
     db.homeAnimationData.remove({},callback); 
    }, 
    function(callback) { 
     var data = { "image": "/imagea", "width": "200px" }; 
     db.homeAnimationData.save(data,function(err,saved) { 
     if (err) callback(err); 
     console.log('Saved'); 
     callback(); 
     }); 
    }, 
    function(callback) { 
     var cursor = db.homeAnimationData.find({}).limit(10); 

     cursor.on('data',function(data) { 
     cursor.pause(); 
     console.dir(data); 
     cursor.resume(); 
     }); 

     cursor.on('err',callback); 

     cursor.on('end',callback); 
    } 
    ], 
    function(err) { 
    if (err) throw err; 
    db.close(); 
    } 
); 

在後一種情況下,這會爲您提供更好的處理以獲得更大的結果。 mongojs文檔本身爲JSONStream提供了example.pipe()

但是,一切正常,你只需要記住這是「異步」編程,並在繼續執行之前,邏輯上等待執行完成,然後像「讀取」寫回的數據,或者確實關閉數據庫連接。