7

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

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

  • 错误处理程序.js
    • 错误110.js
    • 错误131.js
    • ...

ErrorHandler需要这些文件中的每一个(以及一些其他文件)

var serverErrorCode=需要('../../config/ErrorCodesConfig').server,clientErrorCode=需要('../../config/ErrorCodesConfig').client,Error110=需要('./errors/Error110')。错误110,Error131=需要('./errors/Error131')。错误131,Error132=需要('./errors/Error132')。错误132,Error133=需要('./errors/Error133')。错误133,Error150=需要('./errors/Error150')。错误150;

在运行时检入节点调试器时,所需结果为:

关闭:Error110:函数Error110(参数)Error131:函数Error131(参数)错误132:未定义错误133:未定义Error150:函数Error150(消息对象,回调)

Error132和Error133在请求后不可用,而其他则完全可用。

我已经读到,如果您有一个require循环,则会发生这种情况,因此所需的模块(a)需要一个模块(B),而该模块又需要模块a。然后,节点通过返回未定义在第一个要求之后。事实并非如此。

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

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

顺颂商祺,蜗牛

编辑1:
正如特拉维斯·韦伯所指出的:这是错误的!
如果您需要一个已经包含在代码前面某个地方的模块,也会发生这种情况。我考虑过这个问题,但我不需要模块。总的来说,这似乎不是真的,因为,例如实用程序模块需要包含在使用它的每个文件中,而不是仅包含一次。

5
  • 你确定里面的文件是正确的吗?console.log(require('./errors/Error132'))显示了什么?Error132和Error133文件的内容是什么? 评论 2014年7月31日16:11
  • 感谢您的快速回复!我很肯定他的内容是正确的。至少我曾尝试将工作文件的内容复制/粘贴到失败的文件中(通过find/replace更改类名,注意被替换的内容),并尝试以相同的结果要求它。由于我目前正在旅行,无法访问代码,我将在回来后尽快发布失败的文件。
    – 蜗牛
    评论 2014年8月1日16:18
  • 所以!已经有一段时间了。对此我很抱歉。事实证明,你是对的。我的一位同事提交了一个补丁,它更改了每个文件中的一个数字,将Error133的导出转换为“Error132”,并将Error1313的导出转换成“Error1312”。我很抱歉这个愚蠢的错误,我只是没发现……你能给我一个答案吗,这样我就可以把它改对了?
    – 蜗牛
    评论 2014年8月23日11:07
  • 那么你想把我的答案标记为正确吗? 评论 2019年11月14日17:51
  • 1
    嘿,特拉维斯=)我觉得你的帖子最终对其中包含的全部信息来说更为重要。但这并不是这个问题的答案,因为杰西的答案让我明白了这一点。我觉得你下面的回答将继续受到应有的关注,并获得支持=)
    – 蜗牛
    评论 2019年11月15日7:26

2个答案2

重置为默认值
28

一个简单的解释是模块.导出正在解析为未定义在您需要的模块内部。张贴失败模块的代码。

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

这句话不正确。

由于节点的异步特性,“尚未”需要这些文件

要求是同步的。

如果模块A类要求B类,这反过来需要A类,然后A类未定义在模块中B类。但我不确定这就是问题所在。

7
  • 1
    嘿,特拉维斯,正如你从我上面的评论中看到的,我很愚蠢,忽略了我同事带来的打字错误。尽管如此,你的观点非常重要,除了我已经在我原来的帖子中编辑过它之外。既然我还没有足够的声誉来给大家打分,我能做些什么来把你的答案标记为重要吗?
    – 蠕虫
    评论 2014年8月23日11:12
  • 1
    继续使用Stackoverflow:)我很有耐心。 评论 2014年8月23日18:24
  • 1
    尽管如此,谢谢!我会记住你的评论。在我投赞成票之前,只剩下5个声誉:D
    – 蜗牛
    评论 2014年8月23日21:04
  • 2
    现在怎么样?:) 评论 2019年11月14日17:51
  • 1
    这个叫特拉维斯的人5年后回来了,赢得了这场胜利。这就是尽职调查。 评论 2023年3月24日17:16
-1

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

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.