在Express中间件中处理PromiseRejections

时间:2019-11-11 12:02:09

标签: node.js express exception promise

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

我编写了以下代码,但是当代码抛出未处理的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 " );
        } );
    } );

1 个答案:

答案 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)
})