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 相关文章推荐
javascript document.images实例
May 27 Javascript
使用jquery实现简单的ajax
Jul 08 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 Javascript
Javascript实现代码折叠功能
Aug 25 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
webuploader模态框ueditor显示问题解决方法
Dec 27 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
基于bootstrap写的一点localStorage本地储存
Nov 21 Javascript
新版小程序登录授权的方法
Dec 12 Javascript
基于vue实现web端超大数据量表格的卡顿解决
Apr 02 Javascript
详解datagrid使用方法(重要)
Nov 06 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
2013/06/05 Javascript
Js,alert出现乱码问题的解决方法
2013/06/19 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
通过js获取div的background-image属性
2013/10/15 Javascript
VUEJS实战之修复错误并且美化时间(2)
2016/06/13 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
node 标准输入流和输出流代码实例
2019/09/19 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python的文件操作方法汇总
2017/11/10 Python
python素数筛选法浅析
2018/03/19 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
工作表扬信的范文
2014/01/10 职场文书
语文教学随笔感言
2014/02/18 职场文书
员工考核评语大全
2014/04/26 职场文书
学生偷窃检讨书
2014/09/25 职场文书
房产公证书
2015/01/23 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
Python实现科学占卜 让视频自动打码
2022/04/09 Python