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

在我的节点应用程序中,我想处理自定义错误以及本机错误。 我似乎总是与error handling斗争,因为错误似乎是一种特殊types的对象,而不是一个正常的JavaScript对象。

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

我想最终是一个JSONstring,我可以返回到客户端,这两种types的错误(自定义和本机)。

我可以创build一个自定义的错误,如:

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.` }); 

我可以创build一个本地错误,如:

 let e2 = new Error(`Unable to perform delete.`); 

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

  • 对于自定义错误,我可以使用JSON.stringify(e1); 哪个工作。
  • 对于本机错误,我可以使用errors.errorToJSON(e2); 哪个工作。

我的问题是能够分辨这些错误之间的差异,所以我可以调用正确的方法。

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

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

我该如何区分一个自定义错误和本地错误,以便知道使用哪种方法..?

nodejs模块errors导出一个名为isError(err)的函数,如果发送由模块创build的自定义错误,则会返回true

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