node.js express捕获全局异常的三种方法实例分析


Posted in Javascript onDecember 27, 2019

本文实例讲述了node.js express捕获全局异常的三种方法。分享给大家供大家参考,具体如下:

场景

express的路由里抛出异常后,全局中间件没办法捕获,需要在所有的路由函数里写try catch,这坑爹的逻辑让人每次都要多写n行代码

官方错误捕获中件间代码如下

app.use(function(err, req, res, next) {
 console.error(err.stack);
 res.status(500).send('Something broke!');
});

测试证明客户端已经卡死,没有返回结果

解决方法一

process.on('uncaughtException', function(err) {
 console.log('Caught exception: ' + err);
});

虽然可以捕获,在命令行有输出,但是没办法给客户端返回错误了

解决方法二

const Layer = require('express/lib/router/layer');
Object.defineProperty(Layer.prototype, 'handle', {
  enumerable: true,
  get() {
    return this.__handle;
  },
  set(fn) {
    if (fn.length === 4) {
      this.__handle = fn;
    } else {
      this.__handle = (req, res, next) =>
        Promise.resolve()
          .then(() => fn(req, res, next))
          .catch(next);
    }
  },
});

解决方法三

安装express-async-errors,没错,已经有人受不了express不能捕获Promise异常搞了个破解包

地址https://github.com/davidbanham/express-async-errors

npm install express-async-errors --save

使用

var express = require('express');
require('express-async-errors');

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
Textarea与懒惰渲染实现代码
Jan 04 Javascript
JavaScript控制Session操作方法
Jan 17 Javascript
利用js读取动态网站从服务器端返回的数据
Feb 10 Javascript
jquery实现浮动的侧栏实例
Jun 25 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
Apr 01 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
angular.fromJson与toJson方法用法示例
May 17 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 Javascript
vuejs前后端数据交互之从后端请求数据的实例
Aug 11 Javascript
基于vue hash模式微信分享#号的解决
Sep 07 Javascript
JavaScript中变量提升机制示例详解
Dec 27 #Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 #Javascript
Vue使用虚拟dom进行渲染view的方法
Dec 26 #Javascript
node.js Promise对象的使用方法实例分析
Dec 26 #Javascript
js回调函数仿360开机
Dec 26 #Javascript
js仿360开机效果
Dec 26 #Javascript
element-ui中按需引入的实现
Dec 25 #Javascript
You might like
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
koa源码中promise的解读
2018/11/13 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
利用Electron简单撸一个Markdown编辑器的方法
2019/06/10 Javascript
vue请求服务器数据后绑定不上的解决方法
2019/10/30 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
为什么需要版本控制?
2013/08/08 面试题
学习党课思想汇报
2013/12/29 职场文书
高中生的自我鉴定范文
2014/01/24 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
卖车协议书范例
2014/09/16 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
2015高三毕业寄语赠言
2015/02/27 职场文书
污染环境建议书
2015/09/14 职场文书
《地震中的父与子》教学反思
2016/02/16 职场文书
导游词之张家口
2019/12/13 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
Spring实现内置监听器
2021/07/09 Java/Android