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以非常特定的方式处理此问题:
第一个模块将加载并运行(在本例中为
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对象之一,那是解决此问题的一种方法。这实际上是一种棘手的情况。实际上,即使没有模块系统,这也会给您带来麻烦。如果将所有这些代码放在一个文件中,您将如何使其工作?
以上是 Require返回一个空对象 的全部内容, 来源链接: utcz.com/qa/429842.html