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 写类方式之七
Jul 05 Javascript
javascript真的不难-回顾一下基础知识
Jan 15 Javascript
JavaScript中property和attribute的区别详细介绍
Mar 03 Javascript
js实现简单div拖拽功能实例
May 12 Javascript
php基于redis处理session的方法
Mar 14 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
Nov 09 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
基于Angular 8和Bootstrap 4实现动态主题切换的示例代码
Feb 11 Javascript
vite2.0+vue3移动端项目实战详解
Mar 03 Vue.js
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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
window.onload追加函数使用示例
2014/03/03 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
解决Mac node版本升级失败的问题
2018/05/16 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
12 种使用Vue 的最佳做法
2020/03/30 Javascript
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Pytorch 多维数组运算过程的索引处理方式
2019/12/27 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
简单了解Python write writelines区别
2020/02/27 Python
Python解析微信dat文件的方法
2020/11/30 Python
python中封包建立过程实例
2021/02/18 Python
澳大利亚宠物商店:Petbarn
2017/11/18 全球购物
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
Net Remoting把服务器端激活两种模式
2014/01/22 面试题
新学期开学标语
2014/06/30 职场文书
质量月活动总结
2014/08/26 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
电工生产实习心得体会
2016/01/22 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang