【发布时间】:2014-09-23 16:35:35
【问题描述】:
我的节点代码中有一个 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都不可用,而其他的则完美。
我已经读到,如果您有一个 require 循环,就会发生这种情况,因此所需的模块 (A) 需要一个再次需要模块 A 的模块 (B)。然后节点通过在第一个之后返回 undefined 来结束这个循环要求。事实并非如此。
所以我最后的猜测是,在执行时,由于节点的异步特性,文件“尚不”需要,因此只包含“一些”文件。但是 require 是一个同步函数。我不确定这种情况是否可行以及如何检查。
我在这里一无所知,非常感谢您的帮助。
最好的问候, 沃普
编辑 1:
正如 Travis Webb 指出的那样:这是错误的!如果您需要一个已经包含在代码中较早位置的模块,也会发生这种情况。我想过这个,但我不需要模块。总而言之,这似乎并不正确,因为例如,util 模块需要包含在它使用的每个文件中,而不仅仅是一次。
【问题讨论】:
-
你确定里面的文件是正确的吗? console.log(require('./errors/Error132')) 显示什么? Error132和Error133文件的内容是什么?
-
感谢您的快速回复!我很确定他的内容是正确的。至少我已经尝试将工作文件的内容复制/粘贴到失败的文件中(通过查找/替换更改类名,注意被替换的内容)并试图以相同的结果要求它。由于我目前正在旅行并且无法访问代码,因此我会在回来后尽快发布失败的文件。
-
所以!有一阵子了。对于那个很抱歉。事实证明,你是对的。我的一位同事提交了一个补丁,该补丁更改了每个文件中的一个数字,将 Error133 的导出变为“Error132”,将 Error133 中的导出变为“Error132”。对于这个愚蠢的错误,我感到非常抱歉,我只是没有发现它...您可以将您的评论作为答案,以便我将其标记为正确吗?
-
那么你想将我的答案标记为正确吗?
-
Hey Travis =) 我觉得你的帖子最终对于其中包含的整体信息来说是更重要的。不过,这不是这个问题的答案,因为杰西的回答实际上让我弄清楚了。我觉得您在下面的回答将继续受到应有的关注和支持=)
标签: javascript node.js undefined require