为英雄的Angular Tour制作API服务器示例

时间:2018-10-30 10:05:36

标签: node.js express

我使用nodejs,express和mongoose编写了一个用于Angular英雄之旅示例的API服务器。但是无法将结果显示在网页上。

这是步骤: 1.我在app.module.ts中注释了HttpClientInMemoryWebApiModule和InMemoryDataService

要求英雄的角码:

getHeroes(): Observable<Hero[]> {
// TODO: send the message _after_ fetching the heroes
this.messageService.add('HeroService: fetched heroes');
//return of(HEROES);   Use RxJs of()
return this.http.get<Hero[]>(this.heroesUrl)   // Use HttpClient
   .pipe(
     tap(heroes => this.log('fetched heroes')),
     catchError(this.handleError('getHeroes', []))
   );
}

heroesUrl是:

private heroesUrl = 'http://localhost:3000/api/heroes';

我将hero.ts更改为:

export class Hero {
_id: string;
name: string;
__v: number;
}

获取英雄的API服务器代码:

app.get('/api/heroes', function (req, res) {
console.log("Access get /api/heroes")

// Check name parameter
var heroName = req.query.name;
if (!heroName) {
    // get Hero from Mongoose
    Hero.find(function (err, hero) {
    if (err) return console.error(err);
    console.log(hero);
    //res.send(hero);
    res.json(hero);
  })
} else {
    // Find hero by name
    Hero.find( { 'name' : { '$regex' : heroName, '$options' : 'i' } }, function (err,hero) {
        if (err) return console.error(err);
        console.log(hero);
        //res.send(heroName);
        res.json(hero);
    })
    //res.send(heroName);
}
})

因此,如果在数据库中找到了英雄,则API服务器将以JSON格式发送回所有英雄。

问题在于所有已发送的英雄,不会在heroes.component模块中显示。有什么问题?如何找出问题所在?

我已确认使用Insomnia的API服务器来创建对服务器的客户端请求,并已确认答复在Json中,如下所示:

[
{
    "_id": "5bd6f24bbe204f39a0c0c3d4",
    "name": "Monikart",
    "__v": 0
},
{
    "_id": "5bd7f5bbe03a2f2fe00d1fa9",
    "name": "Conetto",
    "__v": 0
},
{
    "_id": "5bd7f7f4c418b5169c34c431",
    "name": "Mosala",
    "__v": 0
},
{
    "_id": "5bd806ef9d47cc435c5ce6b6",
    "name": "Josheppine",
    "__v": 0
},
{
    "_id": "5bd80ba16e7f950158dc4af7",
    "name": "Hanoman",
    "__v": 0
}
]

0 个答案:

没有答案