You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 12:如何用HttpClient处理API的多种响应类型?

问题:Angular HttpClient 请求报错「TypeError: You provided an invalid object where a stream was expected」

原有实现(Fetch API)

原本使用Fetch API发送请求,逻辑为:响应正常则返回JSON,否则抛出响应对象以便捕获处理:

fetch(`http://localhost:9000/api/test`, {
   method: "post",
   body: JSON.stringify({ "data": my_payload })
})
.then(response => {
  if (response.ok) {
    return response.json();
  }

  throw response;
})
.then(data => data)
.catch(err => err);

改用Angular HttpClient后的问题

改用Angular的HttpClient实现相同请求,初始代码如下:

this.http.post('http://localhost:9000/api/test',
{ "data": my_payload })
.pipe(
  catchError(err => throwError(() => err))
);

核心问题:API正常处理时返回JSON格式响应,但发生错误时会返回纯文本格式的错误描述。此时控制台抛出如下错误:

TypeError: You provided an invalid object where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.

即使添加responseType: "text"配置,错误仍然存在:

this.http.post('http://localhost:9000/api/test',
{ "data": my_payload }, { responseType: "text" })
.pipe(
  catchError(err => throwError(() => err))
);

已尝试的排查方向:搜索后怀疑问题与responseType配置、RXJS版本(当前为7.5.0)有关;也曾尝试使用拦截器类,但仅改变了错误发生的位置,未解决根本问题。

请问该错误的原因是什么?


内容的提问来源于stack exchange,提问作者Rafael Fronteira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 17:42:41