2016-10-29 14 views
2

私はこのシナリオを持っています非同期、私はしばらくの間(実験室のテスト)データベースをロードして を呼び出す前にmodule.exports.dbHandlerを更新すると、エラーが発生します。db.allが呼び出されます。Node.jsのmodule.exportsは、親/子変数の参照は、Node.jsので

TypeError: db.all is not a function

dbまだ空のオブジェクト{}。 このコードで何が問題になっていますか?子供のdbを親のmodule.exports.dbHandlerにアクセスさせるにはどうすればよいですか?

+1

変数をモジュールにエクスポートしないでください。この代わりに、関数をエクスポートします。変数を実際にエクスポートする必要がある場合は、ゲッター関数を記述し、ゲッター関数をエクスポートします。 – hisener

+0

答えとしてコメントを投稿して例を挙げてください。 – Azevedo

+0

dbハンドラをパラメータとして渡す必要があることを意味しますか? 'module.exports.queryDB = function(dbHandler)'のように – Azevedo

答えて

2

まず、問題を直接解決するつもりはありません。私は上記の私のコメントを説明しようとします。

私のプロジェクトでも同様のシナリオがありました。しかし、私はMongoDBを使いました。私のDBモデルは次のようになります。

var MongoClient = require('mongodb').MongoClient 

var url = process.env.MONGO_URI 
var collection = 'shortlinks' 

var state = { 
    db: null 
} 

exports.connect = function (done) { 
    if (state.db) return done() 

    MongoClient.connect(url, function (err, db) { 
    if (err) return done(err) 

    state.db = db 
    done() 
    }) 
} 

exports.get = function() { 
    return state.db 
} 
... 
and some other methods 

そして、私はこの行と同じデータベース接続のためのさまざまな場所からこのモジュールにアクセスした:

var db = require('../models/db') 

私は、getterメソッドと同じDBインスタンスにアクセスすることができますし、他の方法も同様です。

関連する問題