Node.js module.exports父/子variables引用

在node.js中我有这种情况:

main.js

module.exports = { dbHandler: {} } const DB_CONNECT = require('dbConnect.js'); const CHILD_MODULE = require('childModule.js'); module.exports.dbHandler = DB_CONNECT.connectDB(); // establishes the connection to the sqlite3 db // ... give some time to module.exports.dbHandler to be loaded. (lab testing) CHILD_MODULE.queryDB(); // <----- error occurs 

childModule.js

  var db = module.parent.exports.dbHandler; //issue is here. Even after the parent have set dbHandler, this still empty {}. module.exports.queryDB = function(){ db.all('SELECT * from mytable', (err, rows) => { // callback console.log(rows); } 

由于DB_CONNECT.connectDB()是asynchronous的,所以在调用CHILD_MODULE.queryDB()之前,我会花一些时间(实验室testing)来加载数据库和更新module.exports.dbHandler ,当调用CHILD_MODULE.queryDB()时会发生错误。

TypeError: db.all is not a function

db仍然是一个空对象{} 。 这个代码有什么错? 我如何让孩子的db访问父母的module.exports.dbHandler

首先,我不会直接解决你的问题。 我会试着在上面解释我的评论。

在我的一个项目中,我有过类似的情况。 但我已经使用了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方法和其他方法访问同一个数据库实例。