在不共享 URL 的情况下获取正确的 ID

Posted

技术标签:

【中文标题】在不共享 URL 的情况下获取正确的 ID【英文标题】:Getting correct ID without sharing URL 【发布时间】:2018-04-18 01:50:08 【问题描述】:

我有一个 Angular 4 应用程序,我试图从 mysql 数据库中获取单行(使用 ID)。我正在将 NodeJS 与 ExpressJS 一起使用。但是,我正在努力寻找一种在不共享确切 URL 路径的情况下从 URL 获取 ID 的方法,因为这会导致网站只呈现 JSON 对象,而不是组件。

server.js

app.get('api/books/:id', (req, res) => console.log(req.params.id); );

如果 URL 是 localhost:3000/books/3,控制台将记录 :idlocalhost: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】:

您需要创建一个函数,在该组件的初始化时,Angular 应用程序会触发对服务器的 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());
  

第一个是我的路由,第二个是我博客组件上的init函数

第三个是blog组件上的get blog功能

最后是我的 blogservice 上的 get blog 函数,它发送 HTTP 请求

希望能有所帮助。

【讨论】:

这就像一个魅力!但是,我需要将'http://localhost:3000/api/books/$id' 更改为'http://localhost:3000/api/books/' + id。谢谢! 很高兴能帮上忙!

以上是关于在不共享 URL 的情况下获取正确的 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重定向原始 URL 的情况下获取短 URL 服务的信息或实际信息

Axios - 在不实际发出请求的情况下获取带有参数的 url

有没有办法在不创建视频标签的情况下从 URL 获取 MediaStream

如何在不使用 fql 的情况下获取帖子 URL 的 Facebook 点赞、分享和评论计数?

如何在不使用任何 ID 的情况下从 spotify API 获取艺术家列表

如何在不接收空字符串的情况下获取主板 ID?