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的一些注意
Dec 06 Javascript
关于Aptana Studio生成自动备份文件的解决办法
Dec 23 Javascript
JavaScript将页面表格导出为Excel的具体实现
Dec 27 Javascript
js中call与apply的用法小结
Dec 28 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
JQuery获取鼠标进入和离开容器的方向
Dec 29 Javascript
javascript事件的绑定基础实例讲解(34)
Feb 14 Javascript
微信小程序显示倒计时功能示例【测试可用】
Dec 03 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
微信小程序和H5页面间相互跳转代码实例
Sep 19 Javascript
Ajax实现局部刷新的方法实例
Mar 31 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/05/22 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
jQuery DOM删除节点操作指南
2015/03/03 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
js判断是否是手机页面
2017/03/17 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
js实现随机8位验证码
2020/07/24 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
Vue+element+cookie记住密码功能的简单实现方法
2020/09/20 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python文件的md5加密方法
2016/04/06 Python
pygame游戏之旅 添加键盘按键的方法
2018/11/20 Python
对python判断是否回文数的实例详解
2019/02/08 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
Python中常用的os操作汇总
2020/11/05 Python
PHP数据运算类型都有哪些
2013/11/05 面试题
歌唱比赛获奖感言
2014/01/21 职场文书
运动会广播稿20字
2014/02/18 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
竞选村长演讲稿
2014/04/28 职场文书
公司应聘自荐书
2014/06/14 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
幼儿园感谢信
2015/01/21 职场文书
通用员工手册范本
2015/05/14 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL