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中切换导出,则将Book放在Author之后-

可以,但是其他模型将停止工作。

我不想做任何骇客工作。

回答:

这是因为您具有循环依赖关系。Node.js以非常特定的方式处理此问题:

  1. 第一个模块将加载并运行(在本例中为book.js)。它(book.js)将加载和运行所述第二模块(author.js),当它(book.js)需要其他(author.js

  2. 当第二个模块(author.js)加载并运行时,它(author.js)需要第一个模块(book.js),但它(author.js)将收到 部分填充的 对象-但是在book.js的导出中设置了很多内容,然后才需要author.js将在那个对象里

  3. book.js完全运行之后,author.js从中获取的对象require('./book')将是完整的book.js模块对象

有关更多信息,请参见以下文档:http :

//nodejs.org/api/modules.html

如果可以动态地将该架构添加到那些ActiveRecord对象之一,那是解决此问题的一种方法。这实际上是一种棘手的情况。实际上,即使没有模块系统,这也会给您带来麻烦。如果将所有这些代码放在一个文件中,您将如何使其工作?

以上是 Require返回一个空对象 的全部内容, 来源链接: utcz.com/qa/429842.html

回到顶部