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 相关文章推荐
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
js简单实现Select互换数据的方法
Aug 17 Javascript
QQ登录背景闪动效果附效果演示源码下载
Sep 22 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 Javascript
BootStrap tab选项卡使用小结
Aug 09 Javascript
JavaScript数组去重的6个方法
Jan 21 Javascript
js 判断登录界面的账号密码是否为空
Feb 08 Javascript
JS库之Particles.js中文开发手册及参数详解
Sep 13 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
vue cli3.0 引入eslint 结合vscode使用
May 27 Javascript
js String.prototype.trim字符去前后空格的扩展
Aug 23 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中循环语句的用法介绍
2012/01/30 PHP
php安全开发 添加随机字符串验证,防止伪造跨站请求
2013/02/14 PHP
基于php-fpm的配置详解
2013/06/03 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
php中时间函数date及常用的时间计算
2017/05/12 PHP
php正则表达式使用方法整理集合
2020/01/31 PHP
Javascript 入门基础学习
2010/03/10 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jquery实现点击弹出层效果的简单实例
2014/03/03 Javascript
简单谈谈javascript中的变量、作用域和内存问题
2015/08/30 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
实现一个Vue自定义指令懒加载的方法示例
2020/06/04 Javascript
[01:00:53]OG vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
Python 代码调试技巧示例代码
2020/08/11 Python
python中的测试框架
2020/11/13 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Bluebella美国官网:英国性感内衣品牌
2018/10/04 全球购物
SQL Server面试题
2013/04/04 面试题
桥梁与隧道工程专业本科生求职信
2013/10/08 职场文书
六一节目主持词
2014/04/01 职场文书
妇女干部培训方案
2014/05/12 职场文书
商场促销活动策划方案
2014/08/18 职场文书
保险公司演讲稿
2014/09/02 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
2015年财政局工作总结
2015/05/21 职场文书
安全生产奖惩制度
2015/08/06 职场文书