场景

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');

最新文章

  1. ebs history to look for password
  2. HDU-2243 考研路茫茫——单词情结(AC自动机)
  3. 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException
  4. nginx服务配置---php服务接入
  5. leetcode007. Reverse Integer
  6. Union-SQL Server学习笔记
  7. R 实例1
  8. 【网络收集】如何修改vs tfs的登录名和密码 .
  9. 那些年我用awk时踩过的坑——awk使用注意事项
  10. url拼凑示例(具体拼凑规则由服务器定)
  11. iterable
  12. Anaconda+linux +opencv+dlib安装
  13. Java连接redis
  14. 编译原理子cygwin的使用
  15. 快速解决PL/SQL Developer过期问题(无需注册码等复杂操作)
  16. SPLAY,LCT学习笔记(五)
  17. Spring Boot 1.4 单元测试
  18. 《高性能MySQL》——第一章MySQL的架构与历史
  19. 由ConcurrentLinkedQueue扯到线程安全 待整理
  20. 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框

热门文章

  1. InnoSetup 安装选择不同语言,修改软件配置参数,达到安装语言就是软件语言效果
  2. uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面
  3. CarTool 使用,获取图片资源
  4. contentOffset、contentSize和contentInset
  5. iOS中session和cookie的使用
  6. swift个人总结
  7. Python数值类型和序列类型
  8. Linux 解决Deepin深度系统无法在root用户启动Google Chrome浏览器的问题
  9. 渗透测试学习 十五、 文件上传&&解析漏洞
  10. 第16讲:ODBC&JDBC简介