您的位置:首页 > Web前端 > Node.js

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 错误 自定义