2015-08-13 88 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()

但是,一切正常,你只需要记住这是“异步”编程,并在继续执行之前,逻辑上等待执行完成,然后像“读取”写回的数据,或者确实关闭数据库连接。