我目前无法从我的mongodb集合“媒体”中获取任何具有“title”和“author”属性的内容(除此之外,但这些仅仅是为了说明的目的)。以下代码打印“undefined to console”。
var db = require('monk')(config['dbPath']);
var medialist = db.get('media');
var foundItems = medialist.find();
var firstFoundItem = JSON.stringify(foundItems[0]);
console.log(firstFoundItem);
此外,当服务器启动时,我在控制台中收到以下消息:
“{[错误:无法找到模块'../build/Release/bson'] code'MODULE_NOT_FOUND'} js-bson:使用纯JS版本“
无法加载c ++ bson扩展在Google上搜索该错误消息后,我尝试了一些解决方案,包括安装npm bson。是仅仅我的代码无效,还是缺少模块(或两者兼而有之?)?
谢谢,
音乐
编辑:按照@hassansin关于异步调用的建议,我尝试了以下内容,现在它给了我“无法读取属性'然后'未定义在e:\ Dev \ BookWyrm \ api \ userRouter.js:16:43 var err;
var params = req.params;
mongoHandler.getMedia(err, params)
.then(function(itemList) {
if (!err) {
var firstFoundItem = JSON.stringify(itemList[0]);
console.log(firstFoundItem);
res.sendFile('medialist.html', {
root: './public/views/'
});
} else {
res.sendFile('errorpage.html', {
root: './public/views/'
});
}
});
});
mongoHandler是以下模块:
var config = require('../config.json');
//var db = require('monk')('localhost:27017/bookwyrm');
var mongo = require('mongodb');
var server = new mongo.Server('localhost', 27017, {
auto_reconnect: true
});
var db = new mongo.Db('bookwyrm', server);
function getMedia(err, params) {
var callback = {};
asyncGet(err, callback);
if (!err) {
return callback.items;
} else {
console.log("Connection or query to mongodb failed");
}
}
function asyncGet(err, callback) {
db.open(function(err, db) {
if (!err) {
db.collection('media', function(err, collection) {
if (!err) {
collection.find(params).toArray(function(err, items) {
if (!err) {
db.close();
callback.items = items;
} else {
errorHandler(err, callback);
}
})
} else {
errorHandler(err, callback);
}
})
} else {
errorHandler(err, callback);
}
});
}
function errorHandler(err, callback) {
if (!db) {
db.close()
};
callback.err = err;
}
module.exports.getMedia = getMedia;
答案 0 :(得分:1)
你的脚本有几个问题。首先你没有指定数据库名称,其次,find
是一个异步操作,读取异步方法的返回值不会给你结果。
var db = require('monk')('localhost:27017/dbname'); // <- database name
var medialist = db.get('media');
medialist.find({})
.then(function(foundItems){ // <- use promise or callback to get result
var firstFoundItem = JSON.stringify(foundItems[0]);
console.log(firstFoundItem);
})