获取API错误处理

2024-06-24

我想显示来自 API 的错误消息,问题是如果我检查,我无法到达该错误response.ok,它返回 Fetch 错误,而不是来自 API 的错误。

如果我不使用if(response.ok)...它从 API 返回错误,但调度成功操作。

这是登录操作的示例:

export const signIn = data => dispatch => {
  dispatch({ 
    type: SIGN_IN
    }) 
  fetch(API_URL+'/login', { 
   method: 'POST',
   headers: {
      'content-type': 'application/json'
      },
   body: JSON.stringify(data),
    })
    .then( response => {
    if (!response.ok) { throw response }
    return response.json()  //we only get here if there is no error
  })
  .then( json => {
    dispatch({
      type: SIGN_IN_SUCCESS, payload: json
    }),
    localStorage.setItem("token", 'Bearer '+json.token)
    localStorage.setItem("user", JSON.stringify(json.user))
  })
  .catch( err => {
    dispatch({
      type: SIGN_IN_FAILED, payload: err
    })
  })
    
}

这是发送正确消息的操作代码,但作为成功操作,而不是失败操作。

export const signIn = data => dispatch => {
  dispatch({ 
    type: SIGN_IN
    }) 
  fetch(API_URL+'/login', { 
   method: 'POST',
   headers: {
      'content-type': 'application/json'
      },
   body: JSON.stringify(data),
    })
    .then( response => response.json())
  .then( json => {
    dispatch({
      type: SIGN_IN_SUCCESS, payload: json
    }),
    localStorage.setItem("token", 'Bearer '+json.token)
    localStorage.setItem("user", JSON.stringify(json.user))
  })
  .catch( err => {
    dispatch({
      type: SIGN_IN_FAILED, payload: err
    })
  })
    
}

通过以下解决方案可以处理JSON API 错误、通用 API 错误 and 一般获取错误

fetch("api/v1/demo", {
    method: "POST",
    headers: {
        "Content-Type": "application/json"
    },
    body: JSON.stringify({
        "data": "demo"
    })
})
    .then(response => {
        if (!response.ok) {
            return Promise.reject(response);
        }
        return response.json();
    })
    .then(data => {
        console.log("Success");
        console.log(data);
    })
    .catch(error => {
        if (typeof error.json === "function") {
            error.json().then(jsonError => {
                console.log("Json error from API");
                console.log(jsonError);
            }).catch(genericError => {
                console.log("Generic error from API");
                console.log(error.statusText);
            });
        } else {
            console.log("Fetch error");
            console.log(error);
        }
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取API错误处理 的相关文章

随机推荐

  • 从 PHP 连接到安全 FTP 服务器

    这个问题符合这个问题 https stackoverflow com questions 2170720 secure ftp connection using php 我正在尝试连接到安全的 FTP 服务器 但它无法连接 奇怪的是我能够执
  • 第二次触摸动画

    尝试掌握 Xcode 并且在过去几周似乎取得了一些进展 有谁知道自定义按钮可以在第二次单击时执行一组不同的动画的方法 假设我有一个自定义按钮 它是马里奥的 当我单击它时 他从屏幕中间跑出屏幕右侧 然后从屏幕左侧跑回中间 他也会发出噪音 我使
  • 警告:不要将 Android 上下文类放置在静态字段中;这是内存泄漏(也会破坏即时运行)

    安卓工作室 不要将 Android 上下文类放置在静态字段中 这是一个 内存泄漏 并且还会破坏即时运行 所以有2个问题 1 你如何称呼startService来自没有上下文静态变量的静态方法 2 如何从静态方法发送 localBroadca
  • 创建一个引用计数的图形

    看来在 matplotlib 中创建图形的标准方法并不像我在 python 中期望的那样 默认调用fig matplotlib figure in a 循环将保留创建的所有图形 并最终耗尽内存 有quite https stackoverf
  • python 将句子标记为单词

    我想从不同的句子中提取信息 所以我使用 nltk 将每个句子划分为单词 我使用以下代码 words for i in range len sentences words append nltk word tokenize sentences
  • iOS上使用NSURLProtocol实现AVPlayer边下载边播放

    我正在尝试在我的服务器上播放 mp4 视频 并且我想同时将该视频缓存到磁盘 我知道我可以只使用 2 个请求来执行此操作 一个用于下载 另一个由 AVPlayer 创建的用于播放视频 但这会浪费网络带宽 因此 我只需要使用一个外部请求来下载数
  • 如何在主屏幕上设置 Fire TV“图标”?

    我有一个 Fire TV 应用程序 该应用程序也将在普通 Android TV 上发布 以及一些搭载 Android 非 Android TV 的电视 也可能在平板电脑上发布 因此 我为 Android TV 设置了横幅 并且工作正常 该图
  • 如何将Spark DataFrame插入Hive内表?

    以追加模式将 DF 插入 Hive 内部表的正确方法是什么 看来我们可以使用 saveAsTable 方法直接将 DF 写入 Hive 或将 DF 存储到临时表然后使用查询 df write mode append saveAsTable
  • 从非托管代码传递指针

    我有一个导入 C dll 的 C 项目 该 dll 有以下功能 int primary read serial int handle int return code int serial int length 我想访问串行参数 我实际上已经
  • C# 设置 FontDialog 仅显示 TrueType 字体

    几乎每个论坛都有人问过这个问题 包括here https stackoverflow com questions 5027001 only truetype fonts are supported this is not a truetyp
  • 将具有混合内容的命名列表转换为数据框

    是否有更好更好的方法将具有混合内容的命名列表转换为数据框架 工作示例 my list lt list a 1 0 b foo c TRUE my df lt data frame key names my list stringsAsFac
  • Matplotlib 中经常使用的不寻常的 Python 语法元素

    一个附带条件 我的问题的核心语法元素是 Python 语言 然而 这个元素经常出现在 Matplotlib 库中 这是我见过它的唯一上下文 因此 我不确定这是一般的 Python 语法问题还是特定于库的问题 我所知道的是 我找不到任何要点
  • 在gnuplot中绘制两点之间的线

    我有一个 csv 文件 其格式如下 有四列 作为MWE xcoord1 ycoord1 xcoord2 ycoord2 0 1 0 2 0 4 0 3 0 5 0 3 0 7 0 5 我想从每个xcoord1 ycoord1 to xcoo
  • 我可以将 Entity Framework 6 与 Visual Studio 2010 一起使用吗?

    我们的开发团队 和构建服务器 成功地将 Visual Studio 2010 和 Visual Studio 2012 混合用于我们的应用程序 然而 自从从 EF5 升级到 EF6 后 我们似乎不再能够使用 VS2010 进行构建 具体来说
  • 如何修改 PHP/Jquery/Ajax 脚本以拥有多个表单字段

    我有一个 php Ajax Jquery 脚本 它将表单字段插入 MySQL 并更新页面 当您点击提交时无需刷新 我希望脚本提交四个表单字段 而不是仅一个 我已经更新了数据库表add delete record还有 3 个附加字段 余额 帐
  • Javascript 从多选选项框中获取值

    这让我发疯 这一定是我所忽视的简单而愚蠢的事情 我的表单中有一个多重选择框 我只是想获取所选的值 在我的循环中 如果我使用警报那么我就没有问题 一旦尝试连接这些值 我就会收到错误 SelBranch selected 为空或不是对象
  • 我可以在没有私钥的情况下将多个证书合并为一个吗?

    我需要在许多设备中拥有最新的证书信任存储 因此我希望能够将它们合并到证书中 然后我可以只推送该一个文件 我只想捆绑多个 CA 的公钥 但我不想添加私有文件 因为我想要将证书推送到我的所有设备 我认为这个功能被称为链 但 openssl 不会
  • 在seaborn kdeplot中设置置信度

    我对seaborn完全陌生 所以如果这是一个简单的问题 我深表歉意 但我在文档中找不到关于如何在kdeplot中控制n levels绘制的级别的描述 这是一个例子 import seaborn as sns import numpy as
  • 如何设置从自定义文件类型到程序的文件关联

    假设我创建了一个自定义文件 它实际上对应于我的程序可以读取的内容 称为 Bacon dek 我可以正常地从我的程序访问它 修改它等 只有少数问题仍然存在 也以相对正确的速度修复它们 现在 我想做的 并在完成后尝试快速修复 实际上是从 Win
  • 获取API错误处理

    我想显示来自 API 的错误消息 问题是如果我检查 我无法到达该错误response ok 它返回 Fetch 错误 而不是来自 API 的错误 如果我不使用if response ok 它从 API 返回错误 但调度成功操作 这是登录操作