Node.js module.exports父/子variables引用
在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()
是asynchronous的,所以在调用CHILD_MODULE.queryDB()
之前,我会花一些时间(实验室testing)来加载数据库和更新module.exports.dbHandler
,当调用CHILD_MODULE.queryDB()
时会发生错误。
TypeError: db.all is not a function
db
仍然是一个空对象{}
。 这个代码有什么错? 我如何让孩子的db
访问父母的module.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方法和其他方法访问同一个数据库实例。