Javascript 在ES6 Node.js中,如何使类在任何地方都可用?

Javascript 在ES6 Node.js中,如何使类在任何地方都可用?,javascript,node.js,error-handling,ecmascript-6,custom-error-handling,Javascript,Node.js,Error Handling,Ecmascript 6,Custom Error Handling,在我的ES6 Node.js应用程序中,我有一个包含大量自定义错误类的文件,即 class FirstCustomError extends Error { constructor(message) { super(message); this.name = "FirstCustomError"; } } class SecondCustomError extends Error { constructor(message) { super(message)

在我的ES6 Node.js应用程序中,我有一个包含大量自定义错误类的文件,即

class FirstCustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "FirstCustomError";
  }
}

class SecondCustomError extends Error {
  constructor(message) {
    super(message);
    this.name = "SecondCustomError";
  }
}

// ...
如何使这些类在应用程序中的任何位置都可用?理想情况下,我不必在每个需要它们的文件中导入它们,也不必求助于
抛出新的global.errors.FirstCustomError('error message')


也就是说,理想情况下,我可以抛出新的FirstCustomError('error message')

您可以将它们添加到运行的第一个js文件中,如app.js,并确保它们在全局范围内,以便可以从任何地方重用,但必须首先运行它们,以便在其他代码尝试调用它们时存在它们

global.customErrFunc = class FirstCustomError extends Error {
   constructor(message) {
     super(message);
     this.name = "FirstCustomError";
   }
}
throw new customErrFunc('Custom error')

通常,要使类可访问,您需要按如下方式导出它:

exports.NameOfFunction = async (req, resp) =>{..... your code}; 
异步不是必需的!如果你需要等待承诺的全面回应
我希望这有帮助

你确实可以把它们戴上:

您需要确保这在任何其他模块使用它们之前发生,也就是说,您需要在主脚本开始时将其放入所需的模块中一次。一种更好的(更可重用的)方法是将它们作为正常的方式从错误模块中导出,然后执行

Object.assign(global, require('./errors.js'));
在主脚本中,以全局形式安装所有导出



免责声明:当然,这是一种可怕的做法不要那样做!只要在需要的地方显式导入它们就行了。使用ES6模块语法很容易,而且它使一切都更加清晰。此外,您的应用程序中不太可能存在如此多的自定义错误,这些错误是真正的交叉问题,与特定功能无关,在这种情况下,您不应该将它们全部放在同一个模块中。

您试图实现的是可能的,正如其他海报所建议的那样,但它不是推荐的。理想的方法是将它们导出到模块中,并在需要时导入模块

customErrors.js

export.modules.FirstCustomError = FirstCustomError
export.modules.SecondCustomError = SecondCustomError
我知道这不是你想要的,但有时候,自以为是的发展是好的<在模块化环境中工作时,代码>全局分配是一种非常不受欢迎的做法。您可以通过导入在代码中使用它们

import { FirstCustomError } from './customErrors.js'

你自己说解决办法。要么处理全局错误。。。或者在每个文件中导入它们。您可以编写
const FirstCustomError=global.errors.FirstCustomError在每个文件中,你想要快捷方式,但这基本上比只导入它们更糟糕。如果您想编写更少的代码,只需为所有模块创建一个以“/path/to/errors.js”导入错误开始的模板这样你就不必输入了。或者在开发工具中创建一个宏来插入该行。理想情况下,我不必在需要的每个文件中导入它们-理想情况下,您不必这样做。IDE为您自动导入。如果您在每个文件中都使用它。。。也许它需要抽象化,或者更好地用其他东西来处理,我会让免责声明更大胆。在模块化环境中这样做是没有意义的,节点是什么。您的免责声明已被记录并理解。然而,我选择您的解决方案,因为尽管它是不明智的,但它是优雅的,而且我正在处理的代码库已经将东西分配给全局对象。
import { FirstCustomError } from './customErrors.js'