Angular HttpClient 发送 post 请求类型

3
官方的Angular HttpClient文档提供了以下示例,用于向后端服务器发起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请求的时候。我知道为什么GET请求需要类型断言,但是不太理解它是如何工作的。

3个回答

1

是的!没错,一个 POST 请求将会返回成功的代码。我不知道文档中为什么要这样写,但我会写出我理解的内容(在评论里写起来有点困难)。

API 的响应取决于您如何实现它。例如,您的数据库为任何 POST 请求设置了一些默认值,比如 HerocreateDate,而您想在您的 Angular 应用程序中使用 createDate。那么,您将从 API 发送 Hero 数据。

就文档中的实现而言,它们使用的是 mock-api。如果您记录响应,您会看到状态码是 204。默认情况下,此状态下不会发送正文。但是,如果您像这样配置模拟服务:

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

你将会得到一个带有200响应的主体,这个主体将是Hero主体。

0
在这个例子中,addHero似乎是英雄“服务”的一部分,该服务被注入到HeroesComponent中。然后,HeroesComponent订阅该服务方法并将从服务器返回的英雄推送到英雄数组中。
以下是HeroesComponent订阅addHero可观察对象的代码。HeroesComponent通过订阅服务方法返回的可观察对象来启动POST方法。
this.heroesService.addHero(newHero)
  .subscribe(hero => this.heroes.push(hero));

0
原因是Web API通常会将创建的对象作为响应返回,这样做是为了方便接收POST请求后的返回结果。
这种后端行为在需要获取某些属性(如ID、创建时间等)的情况下尤其有用,因为这些属性只有在后端通过POST请求创建对象后才能获得。
更多信息请参见https://dev59.com/kGIk5IYBdhLWcg3wg-fK#28951049

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接