Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js module.exports父/子变量引用_Node.js - Fatal编程技术网

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

Node.js module.exports父/子变量引用,node.js,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 sql

在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
由于
DB\u CONNECT.connectDB()
是异步的,因此在调用
CHILD\u module.queryDB()之前,我会花一段时间(实验室测试)加载数据库并更新
module.exports.dbHandler
调用
db.all
时发生错误

TypeError:db.all不是一个函数

db
仍然是一个空对象
{}

这个代码有什么问题?如何使孩子的
db
访问家长的
模块.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方法和其他方法访问同一个db实例。

我认为不应该在模块中导出变量。与此相反,请导出函数。如果您真的需要导出变量,请编写一个getter函数并导出getter函数。您是否可以将您的注释作为答案发布并给出一个示例?您的意思是我应该将db处理程序作为参数传递?像
module.exports.queryDB=function(dbHandler)
var db = require('../models/db')