gpt4 book ai didi

node.js - Require 返回一个空对象

转载 作者:IT老高 更新时间:2023-10-28 21:47:19 32 4
gpt4 key购买 nike

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

作者.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) 需要另一个 (book.js) 时,它 (book.js) 将加载并运行第二个模块 (author.js) author.js)

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

  3. book.js完全跑完后,从require('./book')得到的对象author.js > 将是完整的 book.js 模块对象

有关详细信息,请参阅以下文档:http://nodejs.org/api/modules.html

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

关于node.js - Require 返回一个空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875233/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com