无法从inversify-express-utils控制器全局捕获错误

问题描述

我将这个软件包https://github.com/inversify/inversify-express-utils用于nodejs应用程序,并且我想有一个地方来处理任何控制器的错误,我知道的方法是使用{{3 }}, 但在这种情况下似乎不起作用-没有人调用错误处理程序:

userController.ts

import {interfaces,controller,request,response,httpGet} from "inversify-express-utils";

@controller('/user')
class UserController implements interfaces.Controller {
    
    ....

    @httpGet('/')
    private async get(@request() req,@response() res) {
        throw new Error('broKEN!');
    }
}

server.ts

....

const server = new InversifyExpressServer(container);

server.setConfig((app) => {
    ...
    
    app.use((err,req,res,next) => {
        console.log(err); // This never called
    });

    return app;
});
  1. 为什么不调用处理程序?
  2. 使用inversify-express软件包有更优雅的方法吗?

解决方法

您应该在初始化服务器时使用 setErrorConfig,如下所示:

server.setErrorConfig((app) => {
  app.use((err,req,res,next) => {
    if (err) {
      if (err instanceof HttpRedirectError) {
        return res.redirect(err.redirectUrl);
      }
      return res.json(Requester.createError(err));
    }
    next();
  });
});

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...