【发布时间】:2017-04-23 19:22:28
【问题描述】:
我正在尝试使用 Angular 2 从 Express API 返回一篇文章。
Express 应用程序有这部分代码用于单个获取请求:
router.get('/articles/:articleId', (req, res) => {
let articleId = req.params.articleId;
Article.findById(articleId, (err, article) => {
if(err) {
res.send(err);
} else {
res.json(article)
}
});
});
如果我执行 console.log(article),它会在终端中返回整个 JSON 对象,因此它可以正常工作。
接下来,文章服务如下所示:
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class ArticleService {
constructor( private http:Http ) {
console.log('Article service initialized...')
}
getArticles() {
}
getArticle(id) {
return this.http.get('http://localhost:3000/api/articles/'+id)
.map(res => res.json());
}
addArticle(newArticle){
}
deleteArticle(id){
return this.http.delete('http://localhost:3000/api/articles/'+id)
.map(res => res.json());
}
}
使用上面的代码,deleteArticle(id) 有效。
最后,ArticleDetailComponent 看起来像这样:
import { Component, OnInit } from '@angular/core';
import { ArticleService } from '../services/article.service';
import { Router, ActivatedRoute, Params } from '@angular/router';
import { ArticleComponent } from '../article/article.component'
import 'rxjs/add/operator/switchMap';
@Component({
selector: 'app-articledetail',
templateUrl: './articledetail.component.html',
styleUrls: ['./articledetail.component.css']
})
export class ArticleDetailComponent implements OnInit {
article: ArticleComponent;
title: string;
text: string;
constructor(
private router: Router,
private route: ActivatedRoute,
private articleService:ArticleService){
}
ngOnInit() {
var id = this.route.params.subscribe(params => {
var id = params['id'];
this.articleService.getArticle(id)
.subscribe(article => {this.article = article});
console.log(id) //returns article id correctly
});
}
}
articledetail.component.html 如下所示:
<div class="article-container">
<div class="col-md-12">
<h2>{{article.title}}</h2>
{{article.text}}
<br><br>
</div>
</div>
当我运行应用程序时,我可以获得文章列表并按 Id 删除文章,但我无法在 ArticleDetailComponent 中显示单个文章。
如果我在 ArticleDetailComponent 中执行 console.log(id),它会显示文章 id,但我无法在响应中获取 JSON 对象并在 HTML 中显示它。
有人可以告诉我缺少什么吗?
谢谢
【问题讨论】:
-
我们能看到
articledetail.component.html文件吗?另外,如果你在浏览器中打开http://localhost:3000/api/articles/11,你看到对象了吗? -
是的 Denko,当我在浏览器中打开 localhost:3000/api/articles/58f3e00a35737b774a7e1958 时,它会显示 JSON 对象。谢谢
-
你试过
{this.article = article}里面的console.log(article)
标签: rest api angular express mean-stack