2016-10-29 2 views
2

나는이 시나리오를 비동기, 나는 잠시 (실험실 테스트) 데이터베이스를로드하고 을 호출하기 전에 module.exports.dbHandler을 업데이트하면 오류가 발생하면 db.all이 호출됩니다.Node.js를 module.exports 상위/하위 변수 참조는 Node.js를에서

TypeError: db.all is not a function

db 여전히 빈 개체 {}. 이 코드의 문제점은 무엇입니까? 자녀의 db에서 부모의 module.exports.dbHandler에 액세스하려면 어떻게합니까?

+1

변수를 모듈로 내보내지 말아야한다고 생각합니다. 대신이 함수를 내 보냅니다. 변수를 실제로 내보내려면 getter 함수를 작성하고 getter 함수를 내 보냅니다. – hisener

+0

답변으로 의견을 게시하고 예제를 제공해 주시겠습니까? – Azevedo

+0

db handler를 매개 변수로 전달해야한다는 것을 의미합니까? 'module.exports.queryDB = function (dbHandler)'와 비슷합니다. – Azevedo

답변

2

우선, 직접 문제를 해결하지 않겠습니다. 나는 위에서 나의 의견을 설명하려고 노력할 것이다.

나는 내 프로젝트 중 하나에서 비슷한 시나리오를 가졌습니다. 하지만 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 메소드와 같은 DB 인스턴스에 액세스 할 수 있습니다 내 DB 모델은 다음과 같습니다 다른 방법들도 있습니다.