如何在用户定义的所有路由之后在NodeJS中添加错误处理程序?

问题描述

我正在编写一个库,要求用户处理我的库所产生的错误。现在,我的方法是告诉用户在所有路由之后添加一个错误处理程序,如下所示:

const app = express();

app.use(MyLibrary.init())

// <user's routes here>

app.use(MyLibrary.errorHandler())

app.use((err,req,res,next) => {
  // user's generic error handler
})

我的lib中的init函数如下:

function init() {
  return async (request,response,next) => {
    try {
      
      // some logic here that modifies the request object and can throw an error
      
      return next(); // this can also throw an error,or generate an unhandled rejection / error
    } catch (err) {
      next(err);
    }
  };
}

errorHandler函数如下:

function errorHandler() {
  return async (err,request,next) => {
    try {
      if (/*err from MyLibrary*/) {
        // do something and send a response
        return;
      }
      
      next(err);
    } catch (err) {
      next(err);
    }
  };
}

我的目标是做到这一点,以便用户无需添加app.use(MyLibrary.errorHandler())

想到的一个解决方案是,在init函数中,可以直接处理库的错误,而不必调用next(err)。但是,MyLibrary错误也可能在用户编写的任何API处理程序中生成(因为它们可以通过修改后的request对象与我的库进行交互)。这些API处理程序可能是async

这个问题有解决方案吗?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)