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请求会使用类型断言,但不太明白这是如何工作的。
答案 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
回复。