現在、mongodb コレクション「メディア」から属性「タイトル」と「作成者」を取得するのに問題があります (特に、これらは説明のための 2 つにすぎません)。次のコードは、「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' が見つかりません] コード 'MODULE_NOT_FOUND'} js-bson: 純粋な JS バージョンを使用して、c++ bson 拡張機能を読み込めませんでした"
そのエラー メッセージを Google で検索した後、npm bson のインストールなど、いくつかの解決策を試しました。動作していないのは私のコードだけですか、それとも不足しているモジュール (またはその両方) ですか?
ありがとう、
ミュージカル
編集:@hassansinが非同期呼び出しについて提案したことに従って、私は次のことを試しました
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;