Angular HttpClient发布请求类型

时间:2018-05-01 04:53:42

标签: angular typescript http post

official Angular HttpClient documentation给出了以下示例,用于向某些后端服务器发出POST请求。

/** POST: add a new hero to the database */
addHero (hero: Hero): Observable<Hero> {
  return this.http.post<Hero>(this.heroesUrl, hero, httpOptions)
    .pipe(
      catchError(this.handleError('addHero', hero))
    );
}

但是我很困惑为什么Observable在POST请求中返回Hero数据或者除了成功代码以外的数据。我理解为什么GET请求会使用类型断言,但不太明白这是如何工作的。

3 个答案:

答案 0 :(得分:0)

在该示例中,addHero似乎是注入HeroesComponent的英雄“服务”的一部分。 HeroesComponent然后订阅该服务方法并将从服务器返回的英雄推送到英雄阵列。

这是订阅addHero observable的HeroesComponent。 HeroesComponent通过订阅服务方法返回的observable来启动POST方法。 :

this.heroesService.addHero(newHero)
  .subscribe(hero => this.heroes.push(hero));

答案 1 :(得分:0)

原因是接受POST请求的Web API通常会将创建的对象作为响应返回。

当您需要获取某些属性(ID,createdTime等)时,此后端行为特别有用,这些属性仅在后端的POST请求创建对象后才可用。

有关详细信息,请参阅https://stackoverflow.com/a/28951049/1608690

答案 2 :(得分:0)

呀!确实如此,POST将返回成功代码。我不知道它在文档中以这种方式提到的实际原因是什么,但我会写出我理解的内容。 (很难在评论中写一下:)

POST请求的响应取决于您实施API的方式。例如,您的数据库为任何POST请求设置了一些默认值,比如createDate Hero,并且您希望在角度应用程序中使用createDate。你会怎么做?您将从API发送英雄数据。

就文档中的实施而言,他们正在使用mock-api。如果您要记录响应,则会看到状态为204。默认情况下,使用此状态时,不会发送正文。但是,如果你要配置你的模拟服务,如:

HttpClientInMemoryWebApiModule.forRoot(InMemHeroService, {put204: false, post204: false})

您将收到身体200身体的Hero回复。