Angular:拦截 HTTP 错误并继续链

2024-02-26

我想将某些 HTTP 错误代码视为非错误,并正常处理它们的响应。所以我尝试添加一个HttpInterceptor捕获 500 个状态代码,并返回原始响应(Angular 将其放入error.error):

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).pipe(
      catchError((error: HttpErrorResponse) => {
        if (error.status === 500) {
          return of(error.error);
        } else {
          return throwError('server error');
        }
      })
    );
  }

但是,如果出现错误,我通过管道传输到 http 请求的任何内容都不会被执行。例如,如果我这样做,日志语句就不会发生:

this.http.get(...).pipe(
  tap(console.log)
)

我怎样才能做到这一点?

这是一个sample https://stackblitz.com/edit/call-http-request-in-angular-6-kuuuof...它从不记录 AppComponent 的“得到结果”。


自 Angular http 模块以来,您的链停止工作filters https://github.com/angular/angular/blob/698b0288bee60b8c5926148b79b5b93f454098db/packages/common/http/src/client.ts#L510从拦截器收到的消息:

const res$: Observable<HttpResponse<any>> = <Observable<HttpResponse<any>>>events$.pipe(
        filter((event: HttpEvent<any>) => event instanceof HttpResponse));

正如你所看到的,你应该返回流HttpResponse类如:

import { HttpResponse, ... } from '@angular/common/http';
...

if (error.status === 404) {
  console.log('caught', error.error);

  return of(new HttpResponse({
    body: error.error
  }));
}

叉式堆栈闪电战 https://stackblitz.com/edit/call-http-request-in-angular-6-fx9sxj?file=src%2Fapp%2Ferror-interceptor.ts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular:拦截 HTTP 错误并继续链 的相关文章

  • 是否可以将 FormData 与图像文件一起从 Angular 6 应用程序发送到 Web API

    是否可以将表单数据与图像文件一起从 Angular 6 应用程序传递到 Web api 应用程序组件 ts onSelectFile event if event target files event target files 0 this
  • Angular 2.0 是否有类似于 Angular 1 中的 `$setPristine` 函数?

    提交表格后 pristine输入的状态仍然是 假 我不知道如何重置pristine陈述为真 在 Angular 1 中 我会使用 setPristine功能 我查看了 API 和开发人员指南 没有 API 可以将输入重置为原始状态 Inst
  • Angular 7 将文件内容发布为 multipart/form-data

    我在字符串变量中提供了要发布的内容 我想使用 import HttpClient from angular common http 为了达到与以下相同的效果 curl F email protected cdn cgi l email pr
  • Mat 分页器更改工具提示位置

    我正在尝试定位工具提示mat paginator更靠近分页按钮 目前 工具提示距离太远 如下所示 我尝试更新 cdk overlay pane and mat tooltip panel课程但对我不起作用 任何积分都受到高度赞赏 需要深入组
  • 使用 Jest 和 Testbed 测试 Angular 9 服务

    在我的 Angular 9 项目中我添加了jest并删除Jasmine and Karma 我正在测试一项名为CorrectionService依赖于一个名为的服务RemoteService 我想监视RemoteService查看是否调用了
  • Angular 2 最终版本路由器单元测试

    如何使用 karma 和 jasmine 对 Angular 2 0 0 版中的路由器进行单元测试 这是我的旧单元测试在版本 2 0 0 beta 14 中的样子 import it inject injectAsync beforeEac
  • 对 PrimeNG 应用自定义中间过滤器:数据表

    考虑这样一个场景 我在p dataTable柱子 这是列代码片段
  • 装饰器不支持函数调用

    我在 ng build prod 时遇到问题 装饰器不支持函数调用 但在 initialState 中调用了 Ui export const initialState AppState userAisles null userItems n
  • 如何在 Javascript 中将字符串数组转换为特定的树结构

    我从后端获取文件路径列表 它代表文件夹结构 如下所示 paths path to file1 doc path to file2 doc foo bar doc 路径的长度是任意的 为了使用文件树组件 角度2树组件 https github
  • Angular2 渲染器 setElementStyle 不起作用

    这是我的组件元数据 Component moduleId module id selector si attribute directive template div Highlight Me div br div Highlight Me
  • Angular 2 - 形成组组件

    我正在尝试构建一个数据驱动的表单 输入来自另一个组件 如下所示
  • Angular2 - 在 SystemJS 中导入第 3 方 javascript

    由于某种原因 fileSaver 没有被映射 angular2 jwt 工作正常 I did npm install file saver save获取文件保护程序 然后按如下方式引用它 我有一个 gulp 任务将 js 文件移动到 lib
  • 指令中的 Angular2 样式

    在属性指令 即添加外观 行为的指令 的给定示例中 我们在宿主元素上对样式进行了相当简单的设置 import Directive ElementRef from angular2 core Directive selector myHighl
  • Angular 2 变更检测是如何工作的?

    在 Angular 1 中 更改检测是通过对 scope 层次结构进行脏检查来进行的 我们会在模板 控制器或组件中隐式或显式创建观察者 在 Angular 2 中 我们不再有 scope 但我们确实重写了 setInterval setTi
  • 让管道自我刷新角度

    我有来自后端的静态时间戳 我想每 1 秒刷新一次管道以获取现在的日期 这是我的烟斗 import Pipe PipeTransform from angular core import moment from moment Pipe nam
  • 在 Angular 4 中处理来自 Api 的过期令牌

    我需要帮助来处理我的角度应用程序中的过期令牌 我的 api 已过期 但我的问题是当我忘记注销我的角度应用程序时 一段时间后 我仍然可以访问主页但没有数据 我能做点什么吗 有没有可以处理这个问题的库 或者有什么我可以安装的吗 更好 如果我什么
  • 在 Angular 2 中进行并行调用 http get 或 post 调用

    如何在 Angular 2 中进行并行调用 HTTP get 或 post 调用 我有 2 个服务电话 其中一个愈伤组织的响应必须拨打另一个电话 有人可以建议我如何通过错误处理场景进行这些并行调用吗 如果您的服务是Observable基于而
  • 将 TypeMoq 模拟与 Angular TestBed 结合使用

    我定义了一个FooService如下 import Injectable from angular core export interface Foo Foo string Injectable export class FooServic
  • Material 2.0.0-beta.3 md-slider不拖动

    希望这是一个愚蠢的问题 我刚刚在为雇主构建的项目中添加了一个 md slider 因此我没有代码来表示抱歉 我将 MdSliderModule 导入到我正在使用的模块中 在我的模板中我想要的位置添加了标签 它出现了 看起来很棒 但不会拖沓
  • 如何在 Angular2 中隐藏和替换组件

    你好 我有一个父组件 A 它有 2 个子组件 B 和 C 父级A默认显示子组件B 现在 当单击父级A上显示的按钮时 它将用子组件C替换子组件B 在Angular2中单击按钮后 如何用组件C替换组件B 为此 您可以使用 ngIf https

随机推荐

  • 在 JavaScript 中创建 ISO 日期对象

    我设置了一个 mongo 数据库 在 mongoDb 中创建新的日期对象 创建 ISO 格式的日期对象 例如 ISODate 2012 07 14T00 00 00Z 我正在使用 node js 连接到 mongo 数据库并查询数据库 每当
  • NodeJS、OpenCV 和使用 Net Socket 的流图像

    我的最终目标是将视频从我的笔记本电脑流式传输到服务器 我正在尝试通过在笔记本电脑和服务器上使用 NodeJs 来完成此任务 我使用 OpenCV 库在笔记本电脑上捕获视频并将其保存为 jpg 文件 然后 我读取该文件并将其转换为 base6
  • 远程 ListView 在 Android 小部件上闪烁

    我在远程列表视图方面遇到了意外的麻烦问题 我的应用程序有一个简单的小部件 其中包括一个列表视图 如果列表视图的单元格高度为 1 并且列表视图位于滚动的开始处 则每次调用 datasetchanged 时它都会闪烁 闪烁 有趣的是 如果列表视
  • Yii2 日期比较验证

    我有如下所示的模型规则 但它不起作用 它总是显示错误消息 public function rules return start date end date date format gt php F d Y start date compar
  • 如何在 MATLAB 中对连接的点进行聚类?

    想象一下 我们有很多点 其中一些点连接在一起 我们想要将它们聚类 请看下图 如果我们有 连接矩阵 点 我们如何将它们聚类为两组 连接点组 ConnectivityMatrix 1 2 1 3 2 4 2 3 2 1 3 1 3 2 3 4
  • startMonitoringSignificantLocationChanges 和 startUpdatingLocation 如何相互影响?

    如果我打电话会发生什么startUpdatingLocation while startMonitoringSignificantLocationChanges在跑 重要的位置变化监控是否停止 如果我那么stopUpdatingLocati
  • JSON 字符串错误地映射到文本视图

    我有 3 个文本视图 我试图用 JSON Http 响应中的数据填充它们 但它们当前填充的是响应中的错误数据 由于某种原因 它没有解析字段并正确分配它们 看起来它只是用 JSON 响应中的数据开头填充每个文本视图 截屏 JSON HTTP
  • 如何添加 MSAccess 连接到 CodeIgniter 或 CakePHP?

    我正在尝试使用 Microsoft Access 数据库进行演示项目 我正在考虑在 CodeIgniter 或 CakePHP 中进行该项目 忽略使用 Microsoft Access 可能存在的愚蠢行为 我无法准确地弄清楚连接字符串如何与
  • 将多个单选按钮绑定到单个布尔值

    背景 我有一个包含三个布尔值的模型 public class PageDataModel public bool setting1 get set public bool setting2 get set public bool setti
  • 附加!在计划中?

    我目前正在学习 R5RS 方案 来自 PocketScheme 我发现我可以使用内置于方案的某些变体 但不是全部 中的函数 Append 换句话说 破坏性地改变列表 我对实际代码并不感兴趣 而是对答案感兴趣 而是对将列表作为函数 或向量或字
  • CSS3 文本阴影效果与 jQuery

    我希望能够创建与 CSS3 text shadow 属性相同的效果 使其可供不支持此 CSS3 属性的浏览器 例如 IE 7 和 8 使用 所以我找到了两个插件 文字阴影 https web archive org web 20141108
  • Qt:无法从输入设备读取:没有这样的设备

    我有一个在嵌入式 Linux 平台 i Mx 6 上运行的 Qt 应用程序 我的应用程序应支持触摸屏作为主要输入设备和可选的 USB 键盘 如果已连接 所以现在 我已配置要启动的应用程序 如下所示 my qt app plugin tsli
  • 可更新的 VIEW 不适用于 Postgres 9.5 中的 ON CONFLICT

    PostgreSQL 版本 9 5 4 我有一个表定义为 CREATE TABLE IF NOT EXISTS TEST 1 ID SERIAL PRIMARY KEY C1 BYTEA C2 TEXT NOT NULL C3 BOOLEA
  • 如何从多维数组中找到最大的数组[重复]

    这个问题在这里已经有答案了 可能的重复 获取多维数组中元素的最大值 https stackoverflow com questions 2189479 get the maximum value from an element in a m
  • 获取 Instagram 访问令牌

    我们有一个客户 他的网站上有一个简单的 Instagram 功能 可以按特定标签提取照片 他们只是注意到它不起作用 收到错误 访问令牌无效 我想从一号开始就因为更新了 我们过去不需要访问令牌 因为我们没有对用户做任何事情 只是标签 现在看来
  • Nuxt.js - 在页面中添加两个布局

    我是初学者Nuxt js我正在将 Vue 项目转换为 Nuxt js 并且我想在一个页面上使用两种布局 默认的一个和另一个 逻辑是这样的 第一个布局是 默认 或所有页面上的标题 第二个布局是设置栏 In settings我的页面有 3 条路
  • Vue3 + Vite + Typescript:作用域插槽类型错误

    我有一个包含以下 devstack Vue3 Vite TypeScript 的项目 并且出现以下错误v slot Element implicitly has an any type because expression of type
  • 河内塔序言

    您好 我在实施河内塔时遇到问题 我需要打印包含必要动作的列表列表 但我的算法仅在光盘数量为 N 1 时才起作用 这是我的代码 move 1 X Y L append X Y L move N X Y Z N gt 1 M is N 1 mo
  • javascript 源映射:将映射文件保留在本地,仅用于调试生产 javascript

    我想调试生产网站 但我不想将地图文件上传到服务器上 出于隐私原因 因为它是公开的 对吧 是否可以 我不相信目前任何浏览器都允许从本地文件按需加载源映射 因此您必须以某种方式将源映射放到网上 一种解决方案可能是创建一个 htaccess 文件
  • Angular:拦截 HTTP 错误并继续链

    我想将某些 HTTP 错误代码视为非错误 并正常处理它们的响应 所以我尝试添加一个HttpInterceptor捕获 500 个状态代码 并返回原始响应 Angular 将其放入error error intercept req HttpR