Backbone.js,mongodb和获取相关对象 - 客户端还是服务器端?

时间:2012-08-21 21:50:10

标签: node.js mongodb rest backbone.js nosql

我正在使用mongodb,node.js和backbone.js构建一个应用程序,它将作为我的学习体验。我很想知道从REST API中获取相关对象的最佳做法是什么。

假设我们有“发布”对象和“用户”对象,帖子具有“userId”属性,可将其链接到用户。

你应该:

  1. 在客户端获取帖子对象。检查帖子的“userId”属性,然后单独获取该用户。就服务器端代码而言,这似乎很简单,但如果事情进一步复杂化,最终可能会产生大量请求。
  2. 获取帖子对象,让服务器“进行连接”,并在同一请求中为您提供相关的用户对象。
  3. 有没有人有他们可以分享的经验?

    由于

2 个答案:

答案 0 :(得分:2)

如果没有特定的UI故事,很难回答这个问题,但根据你所提供的内容,我会说#1更接近我会采取的方法。但是,不是“检查”userId的帖子,而是使用rel=user向用户提供链接,只需按照该用户资源的链接即可。我更喜欢HATEOAS范例,其中这些资源通过服务器而不是客户端构造的显式链接进行导航。

这显然会导致更多的XHR,但如果这是一个问题,那么我建议您的视图需要一个视图模型,为提供而不用连接。这是通过公开一个专门为客户服务的模型来完成的,而不需要让客户负责构建它所需的数据。 HTH,

麦克

答案 1 :(得分:1)

MongoDB没有在服务器上“建立连接”的功能,因此相关问题可能更多的是数据建模,以及对link or embed相关用户数据是否更有意义。< / p>

Fetch a post object on the client side. Inspect the "userId" property
of the post and then separately fetch that user. This seems to be
nice and simple in terms of server-side code, but could end up making
lots of requests if things get complicated further down the line.

最接近此选项的方法是获取帖子,然后使用$in operator查询帖子中提到的userID的相关信息。考虑到大量的userID,这可能会导致性能降低,因为服务器仍在进行查询以查找索引中的每个userID。

另一种需要考虑的常见方法是混合选项:

  • 在帖子中嵌入了一些最小的用户数据,例如userID(另一个集合中的用户数据database reference)和一些详细信息,例如用户名。

  • 根据需要在AJAX请求中查找其他详细信息(例如,将鼠标悬停在用户名上)。

更好的方法取决于您的用例以及您希望在应用程序的页面上显示的信息。