如何为用户编写正确的错误消息?

How to write proper error message for the users?

好吧,这就是我发现大部分时间都很困难的事情。即编写正确的错误信息供客户端在出现错误时查看。

一种情况的例子是我使用 Axios 和第三方 api 来获取数据。我需要为 Axios 的错误以及来自 api.

的错误编写正确的错误消息

根据 Axios 的错误处理文档:

try {
  
} catch ( err ) {

      if ( err.response ) {

            // client received an error response (5xx, 4xx)

      } else if ( err.request ) {

            // client never received a response, or request never left

      } else {

            // anything else

      }

}

而第三方api的错误是err.response里面的一个对象叫data。因此,我的 catch 块看起来像这样:

try {
  
} catch ( err ) {

      if ( err.response ) {

             if ( err.response.data ) {

                // api error
                return;

             }

            // client received an error response (5xx, 4xx)

      } else if ( err.request ) {

            // client never received a response, or request never left

      } else {

            // anything else

      }

}

对于 API 错误,我可以简单地使用 err.response.data.message,因为这些消息对用户来说是直截了当且易于理解的。但问题在于可能由 Axios 或我的服务器引起的其他类型的错误。而且 Axios 不提供简单的消息。

那么在这些情况下我可以用什么来回应呢?我可以用 Something went wrong, please try again 来回应,但那太含糊了。

有人请帮助。

这是我所做的。涉及两件事

  1. 在退回给用户的邮件中附加某种唯一标识符。
  2. 使用 console.error() 或一些类似的日志记录操作在内部记录消息,以便您可以对其进行故障排除。
   if ( err.response ) {
        /* format and send the useful err.response message to the browser user */
        return
      } else {
        const errid = uuidv4()
        const message = 'Something went wrong. ' +
          'If it keeps happening please contact us and mention error id ' + 
          errid
        console.error (message, err)
        /* send the message to the browser user */ 
        return
      }

这让不幸的用户相信您可以解决问题。它还为您提供了足够的数据来解决问题。

一旦您对可能导致麻烦的 API 有了一些实际经验,您就可以改进错误处理,甚至考虑重试请求。但除非你有经验,否则你无法做到这一点。