我有一个Angular 4应用程序,我试图从MySQL数据库中获取单行(使用ID)。我在ExpressJS上使用NodeJS。但是,我正在努力寻找一种方法从URL获取ID而不共享确切的URL路径,因为这会导致网站只呈现JSON对象,而不是组件。
server.js
app.get('api/books/:id', (req, res) => {
console.log(req.params.id);
});
如果网址为localhost:3000/books/3
,则控制台将记录:id
。例如,localhost:3000/api/books/3
会将正确的ID记录到控制台。问题是在我的Angular路由中使用后者作为我的URL将导致共享路径,这将无法工作。
以下是我如何使用Angular的HttpModule向服务器发送GET请求的示例:
this.http.get('api/books/:id')
.map(res => res.json())
.subscribe(data => {
this.bookDetail = data;
});
以下是使用Angular的RouterModule路由的路径:
{ path: 'books/:id', component: BookDetailComponent }
我将如何解决这个问题?
答案 0 :(得分:2)
您需要创建一个函数,在该组件的init上,angular app触发对服务器的HTTP请求。例如,我有一个博客应用程序。
{ path: 'blogs/:id', component: BlogComponent },
ngOnInit() {
this.route.params.subscribe(params => this.blog = params.id);
this.getBlog(this.blog);}
getBlog(blog) {
this.blogService.getBlog(blog).subscribe(
data => { this.foundBlog = data;
if (data.comments) {
this.comments = data.comments;
}
getBlog(blog): Observable<any> {
return this.http.get(`http://localhost:3000/api/blogs/${blog}`).map(res => res.json());
}
第一个是我的路线,第二个是我博客组件的初始化功能
第三个是博客组件上的获取博客功能
最后一个是我的blogservice上的get blog函数,它发送HTTP请求
希望这会有所帮助。