我想使用中间件功能处理未处理的承诺拒绝,因为我必须知道请求的请求和响应对象。
我编写了以下代码,但是当代码抛出未处理的Promise时,似乎没有调用中间件/ process.on函数。
所以,我的问题是:是否可以使用中间件处理承诺拒绝,或者(可选)获取请求的请求/响应对象,以防未处理的异常导致错误?
我尝试将中间件作为我的应用程序的第一个中间件,但没有任何结果:根本不会被调用。
app.use ( ( err: Error, req: ILRequest, res: ILResponse, next: ILNextFunction ) =>
{
console.log ( "\n\n***** OUTSIDE ERR: ", err );
process.on ( 'unhandledRejection', ( error: any ) =>
{
console.log ( "\n\n------ ERROR " );
} );
} );
答案 0 :(得分:0)
仅在HTTP请求上调用中间件。如果您想尝试process.on('unhandledRejection')
,请放在“顶层”上-应该只有一个。但是,要将所有这些值放入http响应中,您必须存储一个全局错误(或错误数组),并让另一个HTTP请求检查该错误数组。或查看您的服务器日志。
您可以编写中间件来处理被拒绝的承诺,并使用适当的值调用next
。像这样:
app.use( (err, req, res, next) => {
promiseThing
.then( (good) => {
// do something with good value
next()
})
.catch (err) {
next(err)
}
// could be written shorter as .catch(next)
})