データベース (Cradle を使用した couchDB) に接続するモジュールを作成しようとしています。最後に、モジュールは「db」変数をエクスポートします。
コードは次のとおりです。
var cradle = require('cradle'),
config = require('./config.js');
var db = new(cradle.Connection)(config.couchURL, config.couchPort, {
auth: {
username: config.couchUsername,
password: config.couchPassword
},
cache: true,
retries: 3,
retryTimeout: 30 * 1000
}).database('goblin'); //database name
//Check if DB exists
db.exists(function (err, exists) {
if (err && exists) {
console.log("There has been an error finding your CouchDB. Please make sure you have it installed and properly pointed to in '/lib/config.js'.");
console.log(err);
process.exit();
} else if (!exists) {
db.create();
console.log("Welcome! New database created.");
} else {
console.log("Talking to CouchDB at " + config.couchURL + " on port " + config.couchPort);
}
});
module.exports = db;
問題は、 db.exists 呼び出しが非同期であることです。存在しない場合、変数は完了する前に変数をエクスポートし、システムの残りの部分に影響を与えると思います。
通常の方法で、実行されたノード ページに含まれています。
var db = require('./couchdb.js');
これが起こらないようにする方法、または巨大なネストされたコールバックを持たずにこのような問題に取り組むためのベストプラクティスはありますか?
参考までに、アプリケーション全体はこちら ( https://github.com/maned/goblin ) で、プロジェクトで参照されているバグはこちら ( https://github.com/maned/goblin/issues/36 )で確認できます。 .