Node.js module.exports父/子变量引用

时间:2016-10-29 14:16:28

标签: node.js

在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()是异步的,我会给它一段时间(实验室测试)来加载数据库并在调用module.exports.dbHandler之前更新CHILD_MODULE.queryDB() 调用db.all时会发生错误。

TypeError: db.all is not a function

db仍为空对象{}。 这段代码有什么问题?如何让孩子db访问父母的module.exports.dbHandler

1 个答案:

答案 0 :(得分: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方法和其他方法访问相同的数据库实例。

相关问题