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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
Javascript封装DOMContentLoaded事件实例
Jun 12 Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
BootStrap中Tab页签切换实例代码
May 30 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
Jun 17 Javascript
Bootstrap模态框插入视频的实现代码
Jun 25 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 Javascript
详解ajax的data参数错误导致页面崩溃
Apr 30 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
Sep 23 Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
smarty简单分页的实现方法
2014/10/27 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
JS中showModalDialog 的使用解析
2013/04/17 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
推荐4个原生javascript常用的函数
2015/01/12 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Flask项目中实现短信验证码和邮箱验证码功能
2019/12/05 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
python interpolate插值实例
2020/07/06 Python
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
销售行业个人求职自荐信
2013/09/25 职场文书
主管职责范文
2013/11/09 职场文书
关于安全演讲稿
2014/05/09 职场文书
电子商务专业求职信
2014/07/10 职场文书
银行授权委托书样本
2014/10/13 职场文书
小学运动会开幕词
2015/01/28 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
解决Redis启动警告问题
2022/02/24 Redis
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技