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代码
Nov 10 Javascript
jquery学习笔记二 实现可编辑的表格
Apr 09 Javascript
jQuery 表单验证扩展(三)
Oct 20 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
js文本框输入内容智能提示效果
Dec 02 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
jQuery实现文字自动横移
Jan 08 Javascript
jQuery鼠标悬停内容动画切换效果
Apr 27 jQuery
小程序实现多列选择器
Feb 15 Javascript
详解Vue+elementUI build打包部署后字体图标丢失问题
Jul 13 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 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按百分比生成缩略图的代码分享
2014/05/10 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
PHP将session信息存储到数据库的类实例
2015/03/04 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
2016/12/05 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
jquery 多行文本框(textarea)高度变化
2013/07/03 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
详解JS中Array对象扩展与String对象扩展
2016/01/07 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
nodejs的路径问题的解决
2018/06/30 NodeJs
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
Python实现批量压缩图片
2018/01/25 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
阿联酋最好的手机、电子产品和家用电器网上商店:Eros Digital Home
2020/08/09 全球购物
Ibatis如何使用动态表名
2015/07/12 面试题
中软国际Java程序员机试题
2012/08/19 面试题
2015年员工工作表现评语
2015/03/25 职场文书
2015年团支部工作总结
2015/04/03 职场文书
王亚平太空授课观后感
2015/06/12 职场文书