javascript - Node 要求返回未定义

标签 javascript node.js undefined require

我的 Node 代码中有一个 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;

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

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

error132和Error133在require后不可用,其他完美。

我读到如果你有一个 require 循环就会发生这种情况,因此一个必需的模块 (A) 需要一个模块 (B),而模块 (B) 又需要模块 A。Node 然后通过返回 undefined 来结束这个循环。在第一次要求之后。事实并非如此。

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

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

最好的问候, 世界

编辑 1:
正如 Travis Webb 所指出的:这是错误的!
如果您需要一个已经包含在代码前面某处的模块,也会发生这种情况。我考虑过这个,但我不需要模块。总而言之,这似乎不是真的,因为,例如,util模块需要包含在它使用的每个文件中,而不是只包含一次。

最佳答案

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

It also happens if your require a module that is already included somewhere earlier in the code.

这个说法是不正确的。

due to the asynchronous nature of node, the files are "not yet" required

require 是同步的。

如果模块 A 需要 B 是正确的,而 B 又需要 A,那么 A 将在模块 B 中为 undefined。但我不确定这是问题所在。

关于javascript - Node 要求返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063868/

相关文章:

javascript - 使用 API 或 XML 记录从 Plivo WebSDK 进行的调用

javascript - 引用错误,表示变量未定义

javascript - 在 JavaScript 中调用函数

jquery - 航点总是给出 "undefined is not a function/object"错误

javascript - JavaScript 中 undefined variable : difference between typeof and not exists

javascript - Protractor 等待不必要地失败

node.js - 无法使用 ionic 或 cordova

javascript - StructuredClone() 在 TypeScript 中不可用

node.js - 通过请求正文将 Sails.js 路由绑定(bind)到模型蓝图操作

javascript - jQuery.getJSON 始终返回空对象