Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs自定义错误类抛出;TypeError:ValidationError不是构造函数;_Javascript_Node.js_Ecmascript 6 - Fatal编程技术网

Javascript Nodejs自定义错误类抛出;TypeError:ValidationError不是构造函数;

Javascript Nodejs自定义错误类抛出;TypeError:ValidationError不是构造函数;,javascript,node.js,ecmascript-6,Javascript,Node.js,Ecmascript 6,看看其他一些关于构建类的问题,我不知道我在这里做错了什么 我有一个名为ValidationError的自定义错误类,它位于ValidationError.js文件中: class ValidationError extends Error { constructor(message, errors) { super(message); this.errors = errors; this.name = this.constructor.name; if (type

看看其他一些关于构建类的问题,我不知道我在这里做错了什么

我有一个名为ValidationError的自定义错误类,它位于ValidationError.js文件中:

class ValidationError extends Error {
constructor(message, errors) {
    super(message);
    this.errors = errors;
    this.name = this.constructor.name;
    if (typeof Error.captureStackTrace === 'function') {
        Error.captureStackTrace(this, this.constructor);
    } else {
        this.stack = (new Error(message)).stack;
    }
}
}

module.exports = ValidationError;
我需要在另一个文件中使用该类,如下所示:

const { ValidationError } = require('./validationError');
这样称呼它,这是抛出错误的那一行:

const validationError = new ValidationError('JSON failed validation.', result.errors);
抛出的错误是,“TypeError:ValidationError不是构造函数”

我在节点10.6.4上


那么我做错了什么?谢谢你的帮助

您不是使用
.ValidationError
构造函数导出对象,而是直接将类设置为
模块.exports
。因此,在您的导入中,它应该是

const ValidationError = require('./validationError');

并且不要使用解构语法。

您不是使用
.ValidationError
构造函数导出对象,而是直接将该类设置为
模块。导出
。因此,在您的导入中,它应该是

const ValidationError = require('./validationError');

不要使用解构语法。

在我看来很好。您是使用本机ES6还是有一个透明步骤?我建议使用
Error.captureStackTrace(这个是new.target)
(虽然实际上这应该在
super
调用中发生)在我看来很好。您是使用本机ES6还是有一个透明步骤?我建议使用
Error.captureStackTrace(这个是new.target)
(虽然实际上这应该已经发生在
super
调用中了)