当前位置: 首页 > 面试题库 >

Require返回一个空对象

章琛
2023-03-14
问题内容

我有一个文件夹,其中包含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对象之一,那是解决此问题的一种方法。这实际上是一种棘手的情况。实际上,即使没有模块系统,这也会给您带来麻烦。如果将所有这些代码放在一个文件中,您将如何使其工作?



 类似资料:
  • 我对Spring编程是新手。我正在用Reactor/Webflux项目测试反应式编程。 数据库注册通过POST工作得很好。 我的模型: 我的存储库 我的用户服务

  • 问题内容: 如果不是原始类型,返回类型的正确方法是什么?例如。我目前使用null如下。 问题答案: Void类是一个无法实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。 因此,以下任何条件就足够了: 参数化并返回或 参数化并返回 用您的一个参数化 你不能让这种方法,和其他任何回报 的东西 。由于忽略了某些内容,因此您可以返回任何内容。

  • 首先,我收到来自post string属性和来自控制器的inputStream。 接下来,我的服务调用ParseGeojosnStream以流式传输文件的内容。 接下来,传递特性的名称和列表,并将其插入表中。 最后,使用字符串属性和表名作为id创建scheme。 那么,当强制转换为json并将其存储在数据库中时,为什么要返回一个空的属性对象呢? 代码如下: log.info(“jsonGeomet

  • 我是JPCAP的新手。我在用 eth0链路Encap:Ethernet HWaddr 18:A9:05:CB:8D:FB 上行广播多播MTU:1500度量:1个RX数据包:0个错误:0个丢弃:0个溢出:0帧:0个TX数据包:0个错误:0个丢弃:0个溢出:0载波:0个冲突:0个TX队列n:1000个RX字节:0(0.0B)TX字节:0(0.0B)中断:17 lo链接Encap:本地环回 inet A

  • 我开始进入WP开发,我有问题与ACF后对象返回空,我不知道为什么。我创建了一个ACF,分类法的位置等于类别然后字段设置为... 字段名称:推荐的\u资源 然后在岗位上 我得到了无效的任何帮助或指向正确的方向都是非常感谢的。

  • 函数应该从get请求返回一个 在这种情况下,我只能在为真时执行请求,否则我在函数