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 URL参数读取改进版
Jan 16 Javascript
Jqyery中同等与js中windows.onload的应用
May 10 Javascript
js获取select默认选中的Option并不是当前选中值
May 07 Javascript
jQuery实现固定在网页顶部的菜单效果代码
Sep 02 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
Mar 07 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
Javascript的this详解
Mar 23 Javascript
elementUi vue el-radio 监听选中变化的实例代码
Jun 28 Javascript
layui递归实现动态左侧菜单
Jul 26 Javascript
vue移动端的左右滑动事件详解
Jun 17 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
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
一个简单实现多条件查询的例子
2006/10/09 PHP
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
2013/06/08 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
AngularJS 模型详细介绍及实例代码
2016/07/27 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
JavaScript实现无刷新上传预览图片功能
2017/08/02 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
Vue 使用typescript如何优雅的调用swagger API
2020/09/01 Javascript
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
给Python入门者的一些编程建议
2015/06/15 Python
django+mysql的使用示例
2018/11/23 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python中有函数重载吗
2020/05/28 Python
德国机车企业:FC-Moto
2017/10/27 全球购物
模具毕业生推荐信
2014/02/15 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
国庆庆典邀请函
2015/02/02 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python