在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
?
首先,我不会直接解决您的问题。我将尝试在上面解释我的评论。
在我的一个项目中,我也遇到过类似的情况。但是我用过MongoDB。我的数据库模型如下所示:
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方法和其他方法访问相同的数据库实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句