javascript - 要求 Node 中的类

标签 javascript node.js

我试图在 Node 中的某些类中进行 require,但我通过一个包含所有个人需求的对象的单个文件来要求它们。就像这样-

文件:/classes/controller.js

module.exports = class Controller {}

文件:/classes/model.js

module.exports = class Model {}

文件:/classes/classes.js

module.exports = {
    Controller: require('./controller.js'),
    Model: require('./model.js')
}

然后在app.js

const classes = require('./classes/classes.js');
....code.....
....more code.....
const someController = new classes['Controller'];

问题是,这工作得很好 - 但仅适用于需要“classes”变量的第一个文件。任何需要“类”的后续文件最终只会在“类”变量中保存一个空对象(不,实际的变量名称并不重要,因为我尝试在第二个中使用不同的变量名称)文件,但它仍然最终存储一个空对象)。例如,我经常需要我的 Controller 来实现模型类。

一旦 app.js 调用controller.js,在其内部 -

文件:/classes/controller.js

const classes = require('./classes.js');

module.exports = class Controller {
    constructor(var) {}

    someMethod() {
        ....code....
        const someModel = classes['Model'];
    }
}

我可以调用“console.log(classes)”,它会打印出“{}”,但同样,这仅当它在“controller.js”内部完成并且仅在从内部调用之后才有效。 'app.js'。如果“console.log()”在“app.js”内部完成,或者直接调用“controller.js”而不是通过“app.js”,它将按预期打印出所有类。这就是我如何知道错误发生在哪里/如何发生的。抛出的具体错误是 -

classes.Model is not a constructor

这就是我的问题/问题出现的地方,因为正如我所说,我已经调用了多个文件中的其他对象,而从未遇到过这个问题。所以它一定与类的实现方式有关,对吗?尽管我不了解它如何工作的具体细节,但我大致知道当 Node 中需要一个文件时,之后它会对任何后续文件使用相同的引用 - 正确吗?所以我想这一定是这两件事的相互作用,但我不知道之后的事实,也不知道我是否正确地认为这就是问题所在。

最佳答案

您有 require() 语句的循环依赖。这会导致 require() 之一仅返回一个空对象。你不能这样做。

在controller.js内部,你有require('./classes.js');

在classes.js中,您有require('./controller.js')

因此,每个都引用另一个,这就是导致循环依赖的原因。

您将需要重新构建代码在文件中的布局方式,这样您就不会遇到这种情况。有时,最简单的解决方法是将几个函数合并到一个文件中,而不是将它们全部放在容易受到此问题影响的单独文件中。我不太了解您的整体设计,不知道在这种情况下最好建议什么。

如果除了controller.js之外没有其他人真的会使用classes.js,那么您可以将该代码移至controller.js(您不再需要在controller.js中进行require)。

关于javascript - 要求 Node 中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57487446/

相关文章:

javascript - 强制浏览器下载 Html 页面而不是渲染它

node.js - 恢复: Passing User Data

javascript - 当模式位于单独的文件中时,创建模型时是否存在任何问题?

javascript - 如何在客户端sdk中提交带有payload.nonce的表单?我正在使用 Braintree 给出的示例?

javascript - 可以在任何地方用 Javascript 创建属性吗?

javascript - jquery DOM 操作在 IE8 中非常慢,尤其是 addClass 和 removeClass

node.js - 生成序列 key Node.js 重复问题

node.js - 如何用 supertest 模拟 multer?

node.js - 使用 Node.js 和 Amazon S3 将文件直接传送到客户端

javascript - Jquery,切片失败时返回什么?