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实现youku的视频代码自适应宽度
May 25 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
JS实现的竖向折叠菜单代码
Oct 21 Javascript
学习JavaScript设计模式之装饰者模式
Jan 19 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 Javascript
分享jQuery封装好的一些常用操作
Jul 28 Javascript
AngularJs Scope详解及示例代码
Sep 01 Javascript
vue指令以及dom操作详解
Mar 04 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
vue组件Prop传递数据的实现示例
Aug 17 Javascript
使用pkg打包Node.js应用的方法步骤
Oct 19 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
Sep 03 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 魔术方法使用说明
2009/10/20 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
浅谈JavaScript 代码整洁之道
2018/10/23 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python读取浮点数和读取文本文件示例
2014/05/06 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
python 列表降维的实例讲解
2018/06/28 Python
深入了解Django中间件及其方法
2019/07/26 Python
Python3标准库glob文件名模式匹配的问题
2020/03/13 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Mountain Warehouse波兰官方网站:英国户外品牌
2019/08/29 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
计算机科学与技术应届生求职信
2013/11/07 职场文书
后勤主管工作职责
2013/12/07 职场文书
工会换届选举方案
2014/05/21 职场文书
学校读书活动总结
2014/06/30 职场文书
企业党员个人自我评价
2014/09/20 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书