这期内容当中小编将会给大家带来有关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异常搞了个破解包
npm install express-async-errors --save
使用
var express = require('express');
require('express-async-errors');
上述就是小编为大家分享的node.js中怎么利用express捕获全局异常了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。