我是角度和节点的新手。刚刚完成了角速度快速启动'英雄之旅'中给出的教程。这非常有效。但是,不像在教程中使用内存web api,我想修改它以从mongo db获取数据。所以我修改了我的hero.service.ts来从mongodb / express获取数据。但我根本没有数据。也没有错误。我被困在这里。非常感谢任何帮助。
这是来自hero.service.ts的函数getHeroes。
getHeroes(): Observable<Hero[]> {
return this.http.get(this.heroesUrl)
.map(response => response.json().data as Hero)
.catch((error : Response | any) => {
return Observable.throw(error.statusText);
});
}
在仪表板组件中,我订阅如下:
export class DashboardComponent implements OnInit {
heroes: Hero[] = [];
constructor(private heroService: HeroService) { }
ngOnInit(): void {
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes.slice(1, 5));
// console.log("angular heroes",this.heroes );
}
}
同样在这里我得到一个切片的类型错误,说它不能切片未定义。但如果我把它变成了this.heroes.slice(1,5)它就不会出错。
在服务器端,我有heroes.js。在这里,我从mongo db获取数据工作正常。我可以看到它从数据库中检索了英雄列表。
//Get All Heroes
router.get('/heroes', function(req,res,next){
db.heroes.find(function(err,heroes){
if(err){
res.send(err);
}
console.log("heroes:" , heroes);
res.json(heroes);
});
});
2017年8月8日: 我按如下方式修改了我的可观察代码:
getHeroes(): Observable<Hero[]> {
return this.http.get(this.heroesUrl)
.map(response => {
console.log('heroes',response.json());
response.json() as Hero[];
})
.catch((error : Response | any) => {
return Observable.throw(error.statusText);
});
}
我删除了response.json()。data(因为它在console.log中给出了undefined,任何想法为什么?)并将其作为response.json()。现在它向我展示了控制台中的英雄。但直到订阅它才会成功。