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 相关文章推荐
JS控制表格隔行变色
Jun 26 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
js中生成map对象的方法
Jan 09 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
详解jQuery移动页面开发中的ui-grid网格布局使用
Dec 03 Javascript
Vuejs+vue-router打包+Nginx配置的实例
Sep 20 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
JS模拟浏览器实现全局搜索功能
Sep 11 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 Javascript
Vue Element plus使用方法梳理
Dec 24 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
PHP 字符串 小常识
2009/06/05 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
鼠标滑过出现预览的大图提示效果
2014/02/26 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
JS中type="button"和type="submit"的区别
2017/07/04 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解Vuex管理登录状态
2017/11/13 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
vue 实现element-ui中的加载中状态
2020/11/11 Javascript
tornado框架blog模块分析与使用
2013/11/21 Python
Python求导数的方法
2015/05/09 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
python中的列表和元组区别分析
2020/12/30 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
银行实习人员自我鉴定
2013/09/22 职场文书
审美与表现自我评价
2015/03/09 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
安全教育观后感
2015/06/17 职场文书
2019新员工试用期转正申请书3篇
2019/08/13 职场文书
Python基本的内置数据类型及使用方法
2022/04/13 Python
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL