源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Node.js下自定义错误类型详解

  • 时间:2020-01-04 16:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Node.js下自定义错误类型详解
[b]前言[/b] 一般来说,很少人会考虑如何处理应用产生的错误的策略,调试的过程中,简单地利用[code]console.log(‘error')[/code]定位错误,基本够用了,通过留下这些调试信息,能够为我们以后的调试过程中升了不少时间,提高了维护性。所以错误提示非常重要。同时,也会带来一些比较糟糕用法。最近的项目里就用到了自定义错误类型,觉得有必要深入了解一下,所以就写了这篇文章,方便自己和有需要的大家在需要的时候查阅。 [b]Subclassing Error[/b] 首先我们可以定义一个 Error 的子类。通过 [code]Object.create [/code]和 [code]util.inherits [/code]很容易实现:
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(error instanceof NotFound);
assert(error instanceof Error);
assert.equal(error instanceof RangeError, false);
可以通过 [code]instanceof [/code]来检查错误类型,根据类型进行不同的处理。 上面的代码设置了自带的[code]message[/code], 并且 [code]error [/code]是 [code]NotFound [/code]和 [code]Error [/code]的一个实例, 但是不是 [code]RangeError[/code]。 如果用了 [code]express [/code]框架, 就能设置其他的 [code]properties [/code]让 [code]error [/code]变得更有用。 [b]比方说当处理一个HTTP的错误时, 就可以写成这样:[/b]
function NotFound(msg) {
 Error.call(this);
 this.message = msg;
 this.statusCode = 404;
}
[b]现在就已经可以通过错误处理的中间件来处理错误信息:[/b]
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的状态码给浏览器, 当 [code]err [/code]的 [code]statusCode [/code]未设置或者等于 500 的时候, 就通过邮件来发送这个错误。这样就能排除那些 404, 401, 403等等的错误。 读取 [code]console.error(err.stack)[/code] 事实上并不会像预期那样工作,像 node, chrome 基于 V8 的可以使用 [code]Error.captureStackTrace(this, arguments.callee) [/code]的错误构造函数来进行堆栈跟踪。
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;
[b]当然我们还可以将上面这个创建的抽象错误类型扩展到其他自定义错误中:[/b]
var notFountError = require('./error').NotFountError; 
var UserNotFound = function(msg){
 this.constructor.super_(msg);
}

util.inherits(UserNotFound, notFoundError);
[b]总结[/b] 以上就是Node.js下自定义错误类型的全部内容,希望本文的内容对大家学习或者使用Node.js能有一定的帮助,如果有疑问大家可以留言交流。谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部