节点要求返回undefined

时间:2014-07-31 16:06:56

标签: javascript node.js undefined require

我的节点代码中有一个ErrorHandler类,用于处理所有发生的错误。

每个错误都有自己的类。所有类都放在单独的文件中,因此文件夹结构为:

  • ErrorHandler.js
    • Error110.js
    • Error131.js
    • ...

ErrorHandler需要这些文件(以及其他一些文件)

var serverErrorCodes        = require('../../config/ErrorCodesConfig').server,
clientErrorCodes            = require('../../config/ErrorCodesConfig').client,
Error110                    = require('./errors/Error110').Error110,
Error131                    = require('./errors/Error131').Error131,
Error132                    = require('./errors/Error132').Error132,
Error133                    = require('./errors/Error133').Error133,
Error150                    = require('./errors/Error150').Error150;

在运行时检查节点调试器时,需要的结果是:

Closure:
  Error110: function Error110(params)
  Error131: function Error131(params)
  Error132: undefined
  Error133: undefined
  Error150: function Error150(messageObject, callback)

在require之后,Error132和Error133不可用,而其他的则完美无缺。

我已经读过如果你有一个需求周期就会发生这种情况,因此所需的模块(A)需要一个模块(B),它再次需要模块A.节点然后通过返回undefined来结束这个循环。第一个要求。事实并非如此。

所以我的最后一个猜测是,在执行时,由于节点的异步性质,文件“尚未”需要,因此只包括“一些”文件。但是require是一个同步函数。我不确定这种情况是否可行以及我将如何检查它。

我在这里一无所知,非常感谢帮助。

祝你好运, Worp

编辑1:
正如特拉维斯韦伯指出:这是错误的! 如果您需要一个已包含在代码前面某处的模块,也会发生这种情况。我想到了这个,但我不需要一个模块。这一切似乎都不是真的,因为,例如,util模块需要包含在每个使用它的文件中,而不是只包含一次。

2 个答案:

答案 0 :(得分:17)

更简单的解释是module.exports正在解析您需要的模块内的undefined。发布失败模块的代码。

  

如果你需要一个已经包含在代码前面某处的模块,也会发生这种情况。

这种说法是错误的。

  

由于节点的异步性质,文件是"还没有"

require是同步的。这是不可能的。

如果模块A需要B,而A需要A,则模块undefinedB为{{1}}是正确的。 }。但我不确定这是不是问题。

答案 1 :(得分:-1)

你确定里面的文件是否正确? console.log(需要(' ./ errors / Error132'))显示什么? Error132和Error133文件的内容是什么?