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请求会使用类型断言,但不太理解它是如何工作的。
发布于 2018-05-01 13:23:43
嗯!这是正确的,POST将返回一个成功代码。我不知道文档中以这种方式提到它的真正原因是什么,但我会写下我理解的内容。(很难在评论中写出来:)
POST请求的响应将取决于您是如何实现API的。例如,您的数据库为任何POST请求设置了一些默认值,比如Hero的createDate,而您希望在您的angular应用程序中使用createDate。你会怎么做?您将从API发送英雄数据。
就文档中的实现而言,他们使用的是mock-api。如果您要记录响应,您将看到状态为204。默认情况下,在此状态下,不发送正文。但是如果您要配置您的模拟服务,如下所示:
HttpClientInMemoryWebApiModule.forRoot(InMemHeroService, {put204: false, post204: false})你将得到主体的200响应,它将是Hero主体。
发布于 2018-05-01 13:17:32
在该示例中,addHero似乎是注入到HeroesComponent中的英雄“服务”的一部分。然后,HeroesComponent订阅该服务方法,并将从服务器返回的英雄推送到英雄数组。
这是订阅addHero observable的HeroesComponent。HeroesComponent通过订阅服务方法返回的observable来启动POST方法。:
this.heroesService.addHero(newHero)
.subscribe(hero => this.heroes.push(hero));发布于 2018-05-01 13:17:41
原因是接受POST请求的Web API通常会将创建的对象作为响应返回。
当您需要获取某些属性(ID、createdTime等)时,此后端行为特别有用。仅在后端POST请求创建对象后才可用。
有关信息,请参阅https://stackoverflow.com/a/28951049/1608690 more。
https://stackoverflow.com/questions/50111485
复制相似问题