【问题标题】:Angular HttpClient post request typeAngular HttpClient 发布请求类型
【发布时间】:2018-05-01 13:23:42
【问题描述】:

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

【问题讨论】:

    标签: angular typescript http post


    【解决方案1】:

    是的!没错,POST 将返回成功代码。我不知道它在文档中以这种方式提到的实际原因是什么,但我会写下我所理解的。 (用 cmets 很难写:)

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

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

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

    您将收到带有正文的200 响应,即Hero 正文。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        更多信息请参见https://stackoverflow.com/a/28951049/1608690

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-26
          • 2018-09-18
          • 2016-04-08
          • 1970-01-01
          • 2020-09-29
          相关资源
          最近更新 更多