在 ES6 Node.js 中,如何使 class 随处可用?

In ES6 Node.js, how do I make a class available everywhere?

在我的 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";
  }
}

// ...

如何使这些 类 在应用程序中随处可用?理想情况下,我不必将它们导入我需要的每个文件中,也不必求助于 throw new global.errors.FirstCustomError('error message').

也就是说,理想情况下,我可以做到 throw new FirstCustomError('error message')

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

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

通常要使 class 可访问,您需要像这样导出它:

exports.NameOfFunction = async (req, resp) =>{..... your code}; 

不需要异步!只是如果您需要等待 Promise 的完整响应 希望对您有所帮助!

你确实可以把它们放在 the global object:

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

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

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

Object.assign(global, require('./errors.js'));

在您的主脚本中将所有导出安装为全局变量。


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

正如其他发帖者所建议的那样,您要实现的目标是 可能,但不是 推荐。理想的方法是将它们导出到模块中,然后在需要的地方导入模块。

customErrors.js

export.modules.FirstCustomError = FirstCustomError
export.modules.SecondCustomError = SecondCustomError

我知道这不是您要找的,但固执己见的发展有时是好的。 global 在模块化环境中工作时,赋值是一种非常不受欢迎的做法。您可以通过导入在代码中使用它们。

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