在Express中间件中处理PromiseRejections

我想使用中间件功能处理未处理的承诺拒绝,因为我必须知道请求的请求和响应对象。

我编写了以下代码,但是当代码抛出未处理的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 " );
        } );
    } );
qq492096437 回答:在Express中间件中处理PromiseRejections

仅在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)
})
本文链接:https://www.f2er.com/3124426.html

大家都在问