问题描述
我将这个软件包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;
});
解决方法
您应该在初始化服务器时使用 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();
});
});