服务返回对象而不是对象的数组

时间:2020-08-17 17:56:24

标签: angular typescript

我的服务很简单

  getHotels(): Observable<any> {
    return this.http.get(API_URL + '/hotels');
  }

在我的组件中,我得到了

  getHotels() {
    this.workersService.getHotels().subscribe(
      res => {
        this.hotels = res;
        console.log(this.hotels);
      },
      error => {
        console.log(error);
      }
    );
  }

并且来自console.log的输出是

[{…}]
0: {id: 1, id_hotel: "123", client: "test", date: "17.08.2020", team: 1, …}
length: 1
__proto__: Array(0)

例如,我通过this.hotels[0].client获得了访问权限,但我想要this.hotels.client 如何获取对象而不是对象数组?

2 个答案:

答案 0 :(得分:0)

您正在调用的特定端点this.http.get(API_URL + '/hotels')返回一个对象数组,因此不幸的是,即使其中只有一个对象,您也总是会收到一个数组。从技术上讲,这没有什么错,this.hotels[0].client是处理返回一个项目列表的端点的一种完全正常/可接受的方法。

也就是说,如果必须返回一个对象,则需要通知端点本身以某种方式返回一个对象。

如果您正在调用公共API,请查看文档以查看是否:

  • 有一个要呼叫的更具体的端点(例如this.http.get(API_URL + '/hotels/' + hotelId),其中hotelId包含特定酒店的ID
  • 端点是否支持自定义标头(例如this.http.get(API_URL + '/hotels', headers),其中headers是标头对象(有关更多信息,请参见this answer

如果您改为拥有API,则需要先实现上述方法之一,然后以相同的方式使用它。

答案 1 :(得分:0)

您的方法称为getHotels(),您的URL以/hotels结尾,这都意味着服务器返回了一个数组。您应该更改服务器,或将响应映射到第一项:

this.workersService.getHotels().pipe(
  map((hotels) => hotels[0])
);