繁体   English   中英

处理Node.js错误并提供不同的自定义消息详细信息的最佳方法

[英]Best way to handle nodejs errors and provide different custom message details

我有不同的错误组,例如MyErrorGroupFooMyErrorGroupBar ,我希望在错误处理程序中以不同的方式处理此错误,但我还想在错误消息中提供其他信息。 问题是我通过error.message区分错误,所以如果我想处理两种不同类型的错误,我必须有两条这样的错误消息

throw new Error('MyErrorGroupFoo') 

要么

throw new Error('MyErrorGroupBar')

,但是如果我想在错误消息中提供详细信息,则我必须有多种类型的错误消息,实际上几乎所有错误消息都会像这样有所不同

throw new Error('Wrong Foo, foo =', foo)

要么

throw new Error('Wrong Bar, bar =', bar)

我如何才能实现可能(最常见)特定组中的不同错误消息来处理不同组错误的目标?

现在,我只需将JSON放入这样的错误消息中即可

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并根据what属性决定下一步要做what 这种方法效果很好,但是我觉得有更好的通用解决方案。 是吗?

定义一个类:

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); 
});

这样做的主要目的是在您的类中具有一个可以标准化的“接口”。 现在,您知道出现的每个错误都有一个知道如何处理错误并将其发送到响应中的方法。

请小心,因为现在所有错误都必须具有handle方法。 你可以绕过一个简单的,如果

if (err.handle) {
  err.handle();
} else {
  res.status(500).send();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM