Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/16.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 错误对象,本机和自定义,如何区别?_Javascript_Json_Node.js_Express_Error Handling - Fatal编程技术网

Javascript 错误对象,本机和自定义,如何区别?

Javascript 错误对象,本机和自定义,如何区别?,javascript,json,node.js,express,error-handling,Javascript,Json,Node.js,Express,Error Handling,在我的节点应用程序中,我希望处理自定义错误和本机错误。我似乎总是难以处理错误,因为错误似乎是一种特殊类型的对象,而不是普通的JavaScript对象 我正在尝试使用自定义错误 我想要得到的是一个JSON字符串,对于这两种类型的错误(自定义和本机),我都可以返回给客户端 我可以创建自定义错误,如: errors.create({ name: `UnableToDelete`, defaultMessage: `Unable to perform delete.` }); let e1 =

在我的节点应用程序中,我希望处理自定义错误和本机错误。我似乎总是难以处理错误,因为错误似乎是一种特殊类型的对象,而不是普通的JavaScript对象

我正在尝试使用自定义错误

我想要得到的是一个JSON字符串,对于这两种类型的错误(自定义和本机),我都可以返回给客户端

我可以创建自定义错误,如:

errors.create({
  name: `UnableToDelete`,
  defaultMessage: `Unable to perform delete.`
});
let e1 = new errors.UnableToDelete({
  explanation: `Group has members. You can't delete a group that has members.`
});
let e2 = new Error(`Unable to perform delete.`);
我可以创建一个本机错误,如:

errors.create({
  name: `UnableToDelete`,
  defaultMessage: `Unable to perform delete.`
});
let e1 = new errors.UnableToDelete({
  explanation: `Group has members. You can't delete a group that has members.`
});
let e2 = new Error(`Unable to perform delete.`);
我还可能从其他地方(如节点或其他第三方模块)收到本机错误,例如,如果连接到数据库时出现问题

  • 对于自定义错误,我可以使用
    JSON.stringify(e1)哪个有效
  • 对于本机错误,我可以使用
    errors.errorToJSON(e2)哪个有效
我的问题是能够区分这些错误,这样我就可以调用正确的方法

我不想用正确的方法包装代码中的每一个错误。我想让我的Express错误处理程序执行以下操作:

function error(err, req, res, next) {
    // use either JSON.stringify() or errors.errorToJSON() on
    // the err object. 
}

如何区分自定义错误和本机错误,以便知道使用哪种方法?

节点JS模块
errors
导出一个名为
isError(err)
的函数,如果发送模块创建的自定义错误,该函数将返回
true

var customError = new errors.HttpError();
var nativeError = new Error();
errors.isError(customError); // Will return true
errors.isError(nativeError); // Will return false

这似乎奏效了。除非我很愚蠢,否则“iError”一词不会出现在本页或本页上。您是如何找到这个看似隐藏的方法的..?在源代码中找到了它:。它只检查
解释
code
属性。奇怪的是,它不在文档中。我在中查看测试时发现了该方法:可能他们忘了将此方法添加到文档中。。。