如何从 API 请求中检索错误消息 [重复]

Posted

技术标签:

【中文标题】如何从 API 请求中检索错误消息 [重复]【英文标题】:How do I retrieve the error message from an API request [duplicate] 【发布时间】:2019-11-21 16:32:38 【问题描述】:

我正在构建一个身份验证项目。我不确定如何显示错误消息,以便我可以在屏幕上打印它们。例如,如果电子邮件地址已经注册,我怎么会得到这个错误。当我使用邮递员进行测试时,我能够看到错误消息,但我不确定如何使用 axios 来做到这一点。以下是用户输入已注册电子邮件时的代码。如何访问该消息

User.findOne( email ).then(user => 
    if (user)
        return res.status(400).json( msg: "Email already in use" );
);

【问题讨论】:

【参考方案1】:

发生的情况是,当您的服务器返回状态代码(如 400)时,它最终会在客户端代码(您正在执行请求的位置)中出现异常。有几种不同的方法可以解决这个问题,但最简单的方法是try/catch

这是他们在GitHub 上建议的示例:

/*
 * Handling Errors using async/await
 * Has to be used inside an async function
 */
try 
    const response = await axios.get('https://your.site/api/v1/bla/ble/bli');
    // Success ?
    console.log(response);
 catch (error) 
    // Error ?
    if (error.response) 
        /*
         * The request was made and the server responded with a
         * status code that falls out of the range of 2xx
         */
        console.log(error.response.data);
        console.log(error.response.status);
        console.log(error.response.headers);
     else if (error.request) 
        /*
         * The request was made but no response was received, `error.request`
         * is an instance of XMLHttpRequest in the browser and an instance
         * of http.ClientRequest in Node.js
         */
        console.log(error.request);
     else 
        // Something happened in setting up the request and triggered an Error
        console.log('Error', error.message);
    
    console.log(error);

他们有更多的例子here。在其他一些 HttpClient 中,它们可以选择始终返回完整的 http 响应。我在 Axios 上没有看到该选项,但它可能只是隐藏在他们的文档中。

【讨论】:

【参考方案2】:

查找有关 axios 文档的更多信息 - https://github.com/axios/axios/blob/master/README.md

假设您有一个 api 端点,您可以在其中检查上述条件以获取唯一电子邮件地址,因此您可以使用 axios 向您的端点发送 post 请求并从服务器获取响应。在下面的示例中,将httpbin url 替换为您的端点并执行以获取响应。

您可以访问您的msg,一条错误消息将发布在error 日志中。 处理 catch 部分中的任何异常。

console.log(response.msg)

axios.post('https://httpbin.org/post', 
    email: 'abc@xyz.com',
  )
  .then(function (response) 
    console.log(response);
  )
  .catch(function (error) 
    console.log(error);
  );
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.js"></script>

【讨论】:

以上是关于如何从 API 请求中检索错误消息 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Web api 从 Azure 队列中检索消息文本,但消息文本已编码。我如何删除编码

如何从已发送的电子邮件中检索(google api)

从请求上下文中添加和检索数据

如何使用Angular从用户那里检索地理位置[重复]

.net Web API。如何从访问令牌中检索用户属性(用户 ID)?基于当前用户/令牌的请求处理程序代码

请求 Autodesk Forge、Reality Capture API 下载链接的错误消息