错误对象,本地和自定义,如何区分?
在我的节点应用程序中,我想处理自定义错误以及本机错误。 我似乎总是与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