[node.js] Require는 빈 개체를 반환합니다.

index.js와 몇 가지 모델 (클래스) index.js가있는 폴더가 있습니다.

module.exports = {
   Book : require('./book'),
   Author : require('./author')
}

book.js

var Author = require('./author')
var Book = models.ActiveRecord.extend({
    schema : {
        belongsTo : {
            author : Author
        }
    }
})
module.exports = Book

author.js

var Book = require('./book')
var Author = models.ActiveRecord.extend({
    schema : {
        hasMany : {
            author : Book
        }
    }
})

module.exports = Author

문제는 Author 클래스가 책을 찾지 못하는 것 같습니다! 그것은 단지 빈 개체입니다. 그러나 index.js에서 내보내기를 전환하면 Author 뒤에 Book을 넣습니다. 작동하지만 다른 모델은 작동을 멈 춥니 다.

나는 그것을 작동시키기 위해 어떤 해킹도하고 싶지 않습니다.



답변

순환 종속성이 있기 때문입니다. Node.js는이를 매우 구체적인 방식으로 처리합니다.

  1. 첫 번째 모듈이로드되고 실행됩니다 (이 경우 book.js). 그것은 ( book.js)로드 (두 번째 모듈을 실행 author.js이 (때) book.js() 다른 필요 author.js)

  2. 두 번째 모듈 ( author.js)이로드되고 실행되면 ( author.js) 첫 번째 모듈 ( book.js)이 필요하지만 ( author.js)는 부분적으로 채워진 객체를 받게됩니다. 그 대상에있다

  3. book.js이 완전히 실행 된 후 author.js가져온 개체 는 require('./book')전체 book.js모듈 개체가됩니다.

자세한 정보는 다음 문서를 참조하십시오. http://nodejs.org/api/modules.html

해당 스키마를 ActiveRecord 개체 중 하나에 동적으로 추가 할 수 있다면 이것이 해결하는 한 가지 방법입니다. 이것은 실제로 일종의 까다로운 상황입니다. 실제로 모듈 시스템이 없어도 문제가 발생할 수 있습니다. 이 모든 코드를 하나의 파일에 넣으면 어떻게 작동할까요?


답변