我的observable不会返回数据,尽管从mongodb获取它

时间:2017-08-05 06:38:38

标签: mongodb angular express observable

我是角度和节点的新手。刚刚完成了角速度快速启动'英雄之旅'中给出的教程。这非常有效。但是,不像在教程中使用内存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()。现在它向我展示了控制台中的英雄。但直到订阅它才会成功。

0 个答案:

没有答案