错误对象,本地和自定义,如何区分

Error objects, native and custom, how to tell the difference?

本文关键字:何区 自定义 对象 错误      更新时间:2023-09-26

在我的节点应用程序中,我希望处理自定义错误和本机错误。我似乎总是很难处理错误,因为错误似乎是一种特殊类型的对象,而不是普通的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.`);

我还可能从其他地方得到本机错误,比如从节点或另一个第三方模块,例如,如果连接到数据库时出现问题。

  • 对于自定义错误,我可以使用有效的JSON.stringify(e1);
  • 对于本机错误,我可以使用有效的errors.errorToJSON(e2);

我的问题是能够区分这些错误,所以我可以调用正确的方法

我不想用正确的方法包装代码中的每个错误。我想让我的Express错误处理程序做到这一点:

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

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

nodejs模块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