要求返回一个空的对象

我有一个文件夹,它有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 

问题是作者类似乎没有find书! 这只是一个空的对象。 但是,如果我在index.js中切换出口,将Book After Author – 工作,但另一个模型停止工作。

我不想做任何黑客来使其工作。

这是因为你有一个循环依赖。 Node.js以非常特定的方式处理这个问题:

  1. 第一个模块加载并运行(在这种情况下, book.js )。 当它( book.js )需要另一个( author.js )时,它( book.js )将加载并运行第二个模块( author.js

  2. 当第二个模块( author.js )被加载并运行时,它( author.js )需要第一个模块( book.js ),但它( author.js )将会收到一个部分填充的对象 – 但是,在它需要author.js之前,在book.js中导出将在该对象中

  3. book.js完全运行后, require('./book')的对象author.js将成为完整的book.js模块对象

欲了解更多信息,这里是文档: http : //nodejs.org/api/modules.html

如果可以dynamic地将该模式添加到这些ActiveRecord对象之一,那么这是解决这个问题的一种方法。 这实际上是一个棘手的情况。 事实上,即使没有模块系统,这也会给你带来问题。 如果你把所有这些代码放在一个文件中,你将如何使它工作?