我有一个文件夹,有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
问题是作者类似乎没有找到这本书!它只是一个空对象。 但是,如果我在index.js中切换导出,将Book after作为 - 它可以工作,但随后另一个模型停止工作。
我不想做任何破解工作。
答案 0 :(得分:169)
这是因为你有一个循环依赖。 Node.js以非常具体的方式处理它:
第一个模块加载并运行(在本例中为book.js
)。它(book.js
)将加载并运行第二个模块(author.js
),当它(book.js
)需要另一个(author.js
)
当加载并运行第二个模块(author.js
)时,它(author.js
)需要第一个模块(book.js
),但它(author.js
)将收到一个部分填充的对象 - 但是在book.js中的导出设置了许多内容之前,需要author.js将在该对象中
完全运行book.js
后,author.js
获取的对象require('./book')
将成为完整的book.js
模块对象
有关详细信息,请参阅文档:http://nodejs.org/api/modules.html
如果可以将该模式动态添加到其中一个ActiveRecord对象,那么这是解决此问题的一种方法。这实际上是一种棘手的情况。事实上,即使没有模块系统,这也会给您带来麻烦。如果您将所有这些代码放在一个文件中,您将如何使其工作?