Nodejs导入的模块未定义,但是在检查if语句或更改导入顺序时有效

时间:2018-12-14 13:09:37

标签: javascript node.js node-modules

我遇到一个奇怪的问题。

xxx.testFunction();语句在执行时出错:TypeError: Cannot read property 'testFunction' of undefined,但在先决条件为if(xxx)的情况下有效。.

问题可以在以下设置中重新创建

index.js

const { Module1 } = require("./Module1"); //Commenting out this line fixes the issue 
const { Module3 } = require("./Module3");
Module3.testFunction();

Module1.js

const { Module2 } = require("./Module2");
class Module1 {
    static testFunction() {
        console.log("testFunction")
    }
}
module.exports = { Module1 };

Module2.js

const { Module3 } = require("./Module3"); //Commenting out this line also fixes the issue
class Module2 {

}
module.exports = { Module2 };

Module3.js

const { Module1 } = require("./Module1");
class Module3 {
    static testFunction() {
        //if(Module1) //If we merely check this first it works, but directly it doesn't
            Module1.testFunction();
    }
}
module.exports = { Module3 };

此外,如果删除了某些require语句,该函数将被执行。

当更改index.js中的 require的顺序时,它也得到修复。

如果您想知道为什么多余的require,则原因是模块中的其他代码需要它们。.上面的代码是生产代码的精简版,我们在其中发现了问题

据我了解,nodejs模块中的变量的作用域仅限于该模块,对其他模块不会有任何影响。

有人可以解释这种行为吗?

1 个答案:

答案 0 :(得分:0)

您似乎具有循环依赖项。要解决该问题,您可以在函数本身中要求,就像让Module3.js看起来像这样:

SELECT REGEXP_EXTRACT(hora,'\d\d') AS subhoras FROM axmugbcn18.bbdd WHERE hora = '2017-06-05 09:09:32.0'