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 判断浏览器是否支持SVG的代码
Mar 21 Javascript
jquery设置按钮停顿3秒不可用
Mar 07 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
JQuery控制Radio选中方法分析
May 29 Javascript
利用Vue.js指令实现全选功能
Sep 08 Javascript
ionic开发中点击input时键盘自动弹出
Dec 23 Javascript
JavaScript实现瀑布流图片效果
Jun 30 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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 header功能的使用
2013/10/28 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php检测apache mod_rewrite模块是否安装的方法
2015/03/14 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
Zend Framework动作控制器用法示例
2016/12/09 PHP
详解EventDispatcher事件分发组件
2016/12/25 PHP
使用php实现网站验证码功能【推荐】
2017/02/09 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
鼠标经过显示二级菜单js特效
2013/08/13 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
jQuery的基本概念与高级编程
2015/05/14 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
jQuery ajax提交Form表单实例(附demo源码)
2016/04/06 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
JavaScript实现简单的计算器
2020/01/16 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
django在开发中取消外键约束的实现
2020/05/20 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
Python截图并保存的具体实例
2021/01/14 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
美国宠物商店:Wag.com
2016/10/25 全球购物
Sunglass Hut巴西网上商店:男女太阳镜
2020/10/04 全球购物
西门豹教学反思
2014/02/04 职场文书
学校运动会广播稿
2014/10/11 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
幼儿园小班教师个人工作总结
2015/02/06 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python 如何实现文件自动去重
2021/06/02 Python