Node.js module.exports父/子变量引用
在node.js中,我有这样一个场景: main.jsNode.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
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')