Node.js下自定义错误类型详解
2016-10-17 14:17
831 查看
一般来说,很少人会考虑如何处理应用产生的错误的策略,调试的过程中,简单地利用
console.log(‘error')定位错误,基本够用了,通过留下这些调试信息,能够为我们以后的调试过程中升了不少时间,提高了维护性。所以错误提示非常重要。同时,也会带来一些比较糟糕用法。最近的项目里就用到了自定义错误类型,觉得有必要深入了解一下,所以就写了这篇文章,方便自己和有需要的大家在需要的时候查阅。
Subclassing Error
首先我们可以定义一个 Error的子类。通过
Object.create和
util.inherits很容易实现:
var assert = require('assert'); var util = require('util'); function NotFound(msg){ Error.call(this); this.message = msg; } util.inherits(NotFound, Error); var error= new NotFound('not found'); assert(error.message); assert(errorinstanceofNotFound); assert(errorinstanceofError); assert.equal(errorinstanceofRangeError, false);
可以通过
instanceof来检查错误类型,根据类型进行不同的处理。
上面的代码设置了自带的
message, 并且
error是
NotFound和
Error的一个实例, 但是不是
RangeError。
如果用了
express框架, 就能设置其他的
properties让
error变得更有用。
比方说当处理一个HTTP的错误时, 就可以写成这样:
function NotFound(msg) { Error.call(this); this.message = msg; this.statusCode= 404; }
现在就已经可以通过错误处理的中间件来处理错误信息:
app.use(function(err, req, res, next) { console.error(err.stack); if (!err.statusCode|| err.statusCode=== 500) { emails.error({ err: err, req: req }); } res.send(err.statusCode|| 500, err.message); });
这会发送HTTP的状态码给浏览器, 当
err的
statusCode未设置或者等于 500 的时候, 就通过邮件来发送这个错误。这样就能排除那些 404, 401, 403等等的错误。
读取
console.error(err.stack)事实上并不会像预期那样工作,像 node, chrome 基于 V8 的可以使用
Error.captureStackTrace(this, arguments.callee)的错误构造函数来进行堆栈跟踪。
var NotFound= function(msg) { Error.call(this); Error.captureStackTrace(this, arguments.callee); this.message = msg || 'Not Found'; this.statusCode= 404; this.name = "notFound" } util.inherits(NotFound, Error); export.NotFoundError= NotFound;
当然我们还可以将上面这个创建的抽象错误类型扩展到其他自定义错误中:
var notFountError= require('./error').NotFountError; var UserNotFound= function(msg){ this.constructor.super_(msg); } util.inherits(UserNotFound, notFoundError);
总结
以上就是Node.js下自定义错误类型的全部内容,希望本文的内容对大家学习或者使用Node.js能有一定的帮助,如果有疑问大家可以留言交流。谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
相关文章推荐
- Node.js下自定义错误类型详解
- Node.js下如何自定义错误类型
- Node.js下自定义错误类型
- 总结Node.js中的一些错误类型
- 总结Node.js中的一些错误类型
- 利用node.js实现反向代理的方法详解
- 详解如何在ubuntu上安装node.js
- 利用node.js如何创建子进程详解
- node.js的API中文文档详解
- Node.js中使用事件发射器模式实现事件绑定详解
- npm安装时出现错误解决办法及mac下升级node.js
- 详解Node.js实现301、302重定向服务
- 详解Node.js读写中文内容文件操作
- Node.js connect ECONNREFUSED错误
- Node.js中的child_process模块详解
- SpringBoot集成Swagger步骤详解及遇到类型转换错误+400
- 《JS高程(3)》DOM节点层次Node类型-第10章笔记(11)
- android自定义Application类类型转换异常错误
- 详解如何使用Node.js编写命令工具――以vue-cli为例
- js类型转换与引用类型详解(Boolean_Number_String)