我的节点代码中有一个ErrorHandler类,用于处理所有发生的错误。
每个错误都有自己的类。所有类都放在单独的文件中,因此文件夹结构为:
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
模块需要包含在每个使用它的文件中,而不是只包含一次。
答案 0 :(得分:17)
更简单的解释是module.exports
正在解析您需要的模块内的undefined
。发布失败模块的代码。
如果你需要一个已经包含在代码前面某处的模块,也会发生这种情况。
这种说法是错误的。
由于节点的异步性质,文件是"还没有"
require
是同步的。这是不可能的。
如果模块A
需要B
,而A
需要A
,则模块undefined
中B
为{{1}}是正确的。 }。但我不确定这是不是问题。
答案 1 :(得分:-1)
你确定里面的文件是否正确? console.log(需要(' ./ errors / Error132'))显示什么? Error132和Error133文件的内容是什么?