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 相关文章推荐
js清理Word格式示例代码
Feb 13 Javascript
JavaScript function 的 length 属性使用介绍
Sep 15 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
ionic中列表项增加和删除的实现方法
Jan 22 Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
js实现web调用摄像头 js截取视频画面
Apr 21 Javascript
JS原型和原型链原理与用法实例详解
Feb 05 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
Apr 14 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
Jul 17 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
新手学PHP之数据库操作详解及乱码解决!
2007/01/02 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
Laravel-添加后台模板AdminLte的实现方法
2019/10/08 PHP
VBScript版代码高亮
2006/06/26 Javascript
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
javascript中有趣的反柯里化深入分析
2012/12/05 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
详解小程序如何避免多次点击,重复触发事件
2019/04/08 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
python如何删除列为空的行
2020/07/17 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
UNIX命令速查表
2012/03/10 面试题
保密承诺书范文
2014/03/27 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
考研导师推荐信范文
2015/03/27 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript
Python实现列表拼接和去重的三种方式
2021/07/02 Python