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应用程序中工作,我没有收到任何错误?
发布于 2015-08-13 17:56:14
我猜想你实际上是在给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提供了.pipe()的example。
但是一切都很好,你只需要记住这是“异步”编程,在逻辑上等待执行完成,然后再继续“读”回写入的数据,或者关闭数据库连接。
https://stackoverflow.com/questions/31983960
复制相似问题