要求返回一个空的对象
我有一个文件夹,它有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以非常特定的方式处理这个问题:
-
第一个模块加载并运行(在这种情况下,
book.js)。 当它(book.js)需要另一个(author.js)时,它(book.js)将加载并运行第二个模块(author.js) -
当第二个模块(
author.js)被加载并运行时,它(author.js)需要第一个模块(book.js),但是它(author.js)将会收到一个部分填充的对象 – 然而,在它需要author.js之前,在book.js中导出将在该对象中 -
book.js完全运行后,require('./book')的对象author.js将成为完整的book.js模块对象
欲了解更多信息,这里是文档: http : //nodejs.org/api/modules.html
如果可以dynamic地将这个模式添加到这些ActiveRecord对象之一,那么这是解决这个问题的一种方法。 这实际上是一个棘手的情况。 事实上,即使没有模块系统,这也会给你带来问题。 如果你把所有这些代码放在一个文件中,你将如何使它工作?