首页 > 解决方案 > Angular - 如何从 HTTP POST 正确返回 JSON 响应

问题描述

在我的 Angular 7 应用程序中,我需要通过 HTTP POST 提交搜索查询:

零件:

onSubmit() {
    this.dataService.doSearch(this.model)
    .subscribe(
      data => {
        const ds = data.content as string [];
     this.myDs = data.content as string [];  // FILL THE ARRAY WITH DATA.
      console.log(ds);
   },
   (err: HttpErrorResponse) => {
     console.log (err.message);
   }
 );
  }

数据服务:

doSearch (issue: Issue): any {
  this.dialogData = issue;
  const requestId = this.dialogData['requestId'];
  const application = this.dialogData['application'];
  const component = this.dialogData['component'];
  const feature = this.dialogData['feature'];
  const isOn = this.dialogData['isOn'];
  const dataObject = {requestId: requestId, application: application, component: component,
    feature: feature,  isOn: isOn};
  this._http.post('/api/search', dataObject).subscribe({
  next: data => this.searchResponceData = data.json,
    error: error => console.error('There was an error!', error),
})
.map((res: Response) => res.json());
}

'/api/search' 端点在 node / express 部分中处理,该部分也用于为 Angular 部分提供服务。

node / express 尽其所能并将正确的 JSON 返回给数据服务,但我不太清楚如何将返回的数据传递回组件,因为“订阅”没有“地图”方法。

在这种特定情况下,从底层 POST 返回数据的正确方法是什么?

标签: angular

解决方案


使用 .pipe() 你将能够使用 .map 毕竟。

在我看来,最好的方法是将 http 请求作为承诺返回,然后在您的组件中订阅。

当然,您将能够像往常一样迭代数据

.subscribe( res => someVar = res.map( ...someCode))


推荐阅读