无需共享URL即可获取正确的ID

时间:2017-11-05 23:37:42

标签: mysql node.js angular express

我有一个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 }

我将如何解决这个问题?

1 个答案:

答案 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请求

希望这会有所帮助。