express捕获全局异常的三种方法
2024-10-19 01:23:01
场景
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');
最新文章
- ebs history to look for password
- HDU-2243 考研路茫茫——单词情结(AC自动机)
- 解决spring配置中的bean类型的问题:BeanNotOfRequiredTypeException
- nginx服务配置---php服务接入
- leetcode007. Reverse Integer
- Union-SQL Server学习笔记
- R 实例1
- 【网络收集】如何修改vs tfs的登录名和密码 .
- 那些年我用awk时踩过的坑——awk使用注意事项
- url拼凑示例(具体拼凑规则由服务器定)
- iterable
- Anaconda+linux +opencv+dlib安装
- Java连接redis
- 编译原理子cygwin的使用
- 快速解决PL/SQL Developer过期问题(无需注册码等复杂操作)
- SPLAY,LCT学习笔记(五)
- Spring Boot 1.4 单元测试
- 《高性能MySQL》——第一章MySQL的架构与历史
- 由ConcurrentLinkedQueue扯到线程安全 待整理
- 在Jquery validation里验证通过后,自定义提交不同的action路径,适合一个窗口既可以作为添加对话框也可以作为编辑对话框
热门文章
- InnoSetup 安装选择不同语言,修改软件配置参数,达到安装语言就是软件语言效果
- uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面
- CarTool 使用,获取图片资源
- contentOffset、contentSize和contentInset
- iOS中session和cookie的使用
- swift个人总结
- Python数值类型和序列类型
- Linux 解决Deepin深度系统无法在root用户启动Google Chrome浏览器的问题
- 渗透测试学习 十五、 文件上传&;&;解析漏洞
- 第16讲:ODBC&;JDBC简介