【问题标题】:Error objects, native and custom, how to tell the difference?错误对象,本机和自定义,如何区分?
【发布时间】:2016-09-01 09:23:51
【问题描述】:

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

我正在尝试将errors 用于自定义错误。

我想要结束的是一个 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. 
}

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

【问题讨论】:

    标签: javascript json node.js express error-handling


    【解决方案1】:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2016-08-26
    • 2016-12-16
    • 2019-10-05
    相关资源
    最近更新 更多