在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
?
答案 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方法和其他方法访问相同的数据库实例。