Угловой тип почтового запроса HttpClient - PullRequest
0 голосов
/ 01 мая 2018

В официальной документации 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 возвращает данные Hero или данные, отличные от кода успеха, по этому вопросу в POST-запросе. Я понимаю, почему запрос GET использует утверждение типа, но не совсем понимаю, как это работает.

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Причина в том, что веб-API, принимающий запросы POST, обычно возвращает созданный объект в качестве ответа.

Такое поведение бэкэнда особенно полезно, когда вам нужно получить определенные свойства (ID, madeTime и т. Д.), Которые доступны только после того, как объект создан запросом POST в бэкэнде.

Подробнее см. https://stackoverflow.com/a/28951049/1608690.

0 голосов
/ 01 мая 2018

Да! это правда, POST вернется с кодом успеха. Я не знаю, какова реальная причина, по которой это упоминается в документах, но я напишу то, что понимаю. (было сложно писать в комментариях:)

Ответ на запрос POST будет зависеть от того, как вы реализовали API. Например, в вашей базе данных установлены некоторые значения по умолчанию для любого запроса POST, скажем, createDate из Hero, и вы хотите создать createDate в своем угловом приложении. Что вы будете делать? Вы отправите данные героя из API.

Насколько это реализовано в документах, они используют mock-api. Если вы зарегистрируете ответ, вы увидите статус 204. По умолчанию с таким статусом тело не отправляется. Но если вы настроите свой фиктивный сервис, например:

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

Вы получите 200 ответ с телом, которое будет Hero телом.

0 голосов
/ 01 мая 2018

В этом примере addHero, кажется, является частью "сервиса" героев, который внедряется в компонент Heroes. Затем HeroesComponent подписывается на этот метод обслуживания и отправляет героя, который был возвращен с сервера, в массив героев.

Вот HeroesComponent, подписывающийся на наблюдаемую addHero. HeroesComponent инициирует метод POST, подписываясь на наблюдаемое, возвращаемое методом service. :

this.heroesService.addHero(newHero)
  .subscribe(hero => this.heroes.push(hero));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...