我有一组不同的错误,例如 if (Request.QueryString["Name"]!= null) // null checking
lbl_Name.Text = Request.QueryString["Name"];
和MyErrorGroupFoo
,我希望在我的错误处理程序中以不同方式处理此错误,但我还想在错误消息中提供其他信息。问题是我通过MyErrorGroupBar
区分错误,所以如果我想处理两种不同类型的错误,我必须有两个错误消息,如此
error.message
或
throw new Error('MyErrorGroupFoo')
,但是如果我想在错误消息中提供详细信息,我必须有许多类型的错误消息,实际上几乎所有错误消息都会有所不同
throw new Error('MyErrorGroupBar')
或
throw new Error('Wrong Foo, foo =', foo)
我是否无法实现处理不同错误组的目标,可能(通常)在特定组中出现不同的错误消息?
现在我只需将JSON放到像这样的错误消息
即可throw new Error('Wrong Bar, bar =', bar)
或
throw new Error(JSON.stringify({
what: 'MyErrorGroupFoo',
why: 'Wrong Foo, foo =', foo
})
当我发现错误时,我会解析throw new Error(JSON.stringify({
what: 'MyErrorGroupBar',
why: 'Wrong Bar, bar =', bar
})
并根据error.message
属性决定下一步该做什么。这种方法效果很好,但我觉得有一个更好的通用解决方案。是吗?
答案 0 :(得分:0)
定义一个类:
class ApplicationError {
constructor(message){
this.message = message;
}
handle(req, res) {
res.status(500).send(this.message);
}
}
现在,对于处理与ApplicationError中的错误不同的每个错误,定义一个新类并在必要时抛出它。
class EntityNotFoundError extends ApplicationError {
constructor(message){
super(message);
}
handle(req, res) {
res.send(404).json({message:this.message})
}
}
现在在你的错误处理程序中(这从框架推迟到框架,下面的一个可以用于表达)
app.use(function(err, req, res){
err.handle(req, res);
});
这一点的主要目的是在你的班级中设置一个可以标准化的“界面”。现在您知道每个出现的错误都有一个知道如何处理错误并将其发送到响应中的方法。
请注意,因为现在所有错误必须具有句柄方法。您可以使用简单的 if
绕过它if (err.handle) {
err.handle();
} else {
res.status(500).send();
}