Javascript angular2:RESTAPI的问题

Javascript angular2:RESTAPI的问题,javascript,rest,angular,Javascript,Rest,Angular,我正在尝试学习angular2(来自php脚本,非常困难^^^),在“英雄之旅”中使用真正的RESTAPI。 从我读到的,我认为它可能很简单 我有一个可用的api,使用Express构建: curl -XGET http://localhost:3001/heroes [{"_id":"58185c8a8af4b512c51c0519","no":"1","name":"bahamut","__v":0,"updated_at":"2016-11-01T09:12:42.803Z"},{"_id

我正在尝试学习angular2(来自php脚本,非常困难^^^),在“英雄之旅”中使用真正的RESTAPI。 从我读到的,我认为它可能很简单

我有一个可用的api,使用Express构建:

curl -XGET http://localhost:3001/heroes
[{"_id":"58185c8a8af4b512c51c0519","no":"1","name":"bahamut","__v":0,"updated_at":"2016-11-01T09:12:42.803Z"},{"_id":"58185ca78af4b512c51c051a","no":"2","name":"gatz","__v":0,"updated_at":"2016-11-01T09:13:11.063Z"},{"_id":"58185ec98af4b512c51c051b","no":"3","nam...
在hero.service.ts中,我可以获得以下数据:

getHeroes(): Promise<Hero[]> { // {{{
    console.log('getheroes in service');
    console.log( "%o", this.http.get(this.heroesUrl).toPromise()); 
    return this.http.get(this.heroesUrl)
               .toPromise()
               .then(response => response.json().data as Hero[])
               .catch(this.handleError);
  } // }}}
getHeroes():承诺{//{{{
log('getheroes in service');
log(“%o”,this.http.get(this.heroesUrl.toPromise());
返回this.http.get(this.heroesUrl)
.toPromise()
.then(response=>response.json().data作为英雄[])
.接住(这个.把手错误);
} // }}}

当我在最初的“英雄之旅”上执行相同的console.log时,数据中有一个数组,而这里有一个字符串。。。 我想我必须在某个地方转换字符串,但不管我怎么做,它都不起作用

(我也读了很多可以观察到的例子,但我也没有成功)

Help想告诉我如何。。。 短暂性脑缺血发作


JP

你太接近了!这里的错误在于你如何处理承诺,以及误解它们如何回报。在本例中,您试图分配一个未定义的属性(
response.json().data
),而您想强制
response.json()
作为类型
Hero[]
,然后返回

您需要做的是确保在使用该调用将响应转换为JSON时,您有一个匹配的类型来分配响应。指南中的
Hero
类型与您的回答不匹配,因此您会有错误

要检查您是否收到响应,请调用服务的
getHeroes()
函数并记录返回值。可以对函数进行内部日志记录,但在这一点上,深入了解承诺的工作方式将比任何事情都更有帮助

getHeroes(): Promise<Hero[]> {

    return this.http.get(this.heroesUrl)
               .toPromise()
               .then((response) => response.json() as Hero[])
               .catch(this.handleError);
}

响应的内容类型是什么?您是否认为JSON.parse()令人印象深刻!你很快就解决了我的问题。即使有些要点更清楚,我仍然需要学习更多关于js和()等的知识。。。(例如,我不知道json()来自哪里)。
getHeroes(): Promise<Hero[]> {

    return this.http.get(this.heroesUrl)
               .toPromise()
               .then((response) => {
                 console.log(response.json());
               })
               .catch(this.handleError);
}
getHeroes(): Promise<Hero[]> {
      var r;
      this.http.get(this.heroesUrl)
               .toPromise()
               .then((response) => r = response.json())
               .catch(this.handleError);
      console.log(r);

}