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

 更新时间:2016年10月17日 14:17:39   投稿:daisy  
在JavaScript里面,运行过程中的错误的类型总是被人忽略,这篇文章给大家详细介绍了如何在Node.js下自定义错误类型,对大家学习或者使用Node.js具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴,下面来一起看看吧。

前言

一般来说,很少人会考虑如何处理应用产生的错误的策略,调试的过程中,简单地利用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(error instanceof NotFound);
assert(error instanceof Error);
assert.equal(error instanceof RangeError, 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开发并发布一个cli工具的方法步骤

    用node开发并发布一个cli工具的方法步骤

    这篇文章主要介绍了用node开发并发布一个cli工具的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Nodejs中session的简单使用及通过session实现身份验证的方法

    Nodejs中session的简单使用及通过session实现身份验证的方法

    session的本质使用cookie来实现。本文给大家介绍Nodejs中session的简单使用及通过session实现身份验证的方法,对node.js session相关知识感兴趣的朋友一起学习吧
    2016-02-02
  • 详解Node中导入模块require和import的区别

    详解Node中导入模块require和import的区别

    本篇文章主要介绍了详解Node中导入模块require和import的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • PM2自动部署代码步骤流程总结

    PM2自动部署代码步骤流程总结

    这篇文章主要介绍了PM2自动部署代码步骤流程总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Node.js中的child_process模块详解

    Node.js中的child_process模块详解

    这篇文章主要给大家介绍了关于Node.js中child_process模块的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • node下使用UglifyJS压缩合并JS文件的方法

    node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • NodeJS使用七牛云存储上传文件的方法

    NodeJS使用七牛云存储上传文件的方法

    这篇文章主要介绍了NodeJS使用七牛云存储上传文件的方法,使用七牛云存储上传文件确认安装node和npm,具体服务器端的云存储操作方法大家参考下本文吧
    2017-07-07
  • 解决nodejs报错Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘

    解决nodejs报错Error:EPERM:operation not permitted,mkdi

    这篇文章主要介绍了解决nodejs报错Error:EPERM:operation not permitted,mkdir‘xxxxxxxxxxxxxxxx‘问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • node.js做一个简单的爬虫案例教程

    node.js做一个简单的爬虫案例教程

    这篇文章主要介绍了node.js做一个简单的爬虫案例教程,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • node.js安装及HbuilderX配置详解

    node.js安装及HbuilderX配置详解

    这篇文章主要介绍了node.js安装及HbuilderX配置的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论