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 相关文章推荐
ie6下png图片背景不透明的解决办法使用js实现
Jan 11 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
Sep 10 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
js 打开新页面在屏幕中间的实现方法
Nov 02 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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
dedecms 制作模板中使用的全局标记图文教程
2007/03/11 PHP
PHP基础之运算符的使用方法
2013/04/28 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
2014/03/18 PHP
浅谈关于PHP解决图片无损压缩的问题
2017/09/01 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
一个JS翻页效果
2007/07/23 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
JS实现网页每隔3秒弹出一次对话框的方法
2015/11/09 Javascript
jquery 禁止鼠标右键并监听右键事件
2017/04/27 jQuery
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
让Python代码更快运行的5种方法
2015/06/21 Python
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
Python面向对象编程基础实例分析
2020/01/17 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
2019史上最全Database工程师题库
2015/12/06 面试题
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
怎样写留学自荐信
2013/11/11 职场文书
英语自我评价范文
2014/01/24 职场文书
面试后的英文感谢信
2014/02/01 职场文书
小学一年级评语大全
2014/04/22 职场文书
教师演讲稿大全
2014/05/16 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
MySQL常见优化方案汇总
2022/01/18 MySQL
Python如何使用循环结构和分支结构
2022/04/13 Python
如何通过cmd 连接阿里云服务器
2022/04/18 Servers
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers