【问题标题】:Backbone collections unique identifier / syncing MongoDB collections using socket.io骨干网集合唯一标识符/使用 socket.io 同步 MongoDB 集合
【发布时间】:2015-10-18 07:19:06
【问题描述】:

我在后端使用带有 Node.js 的 MongoDB,在前端使用 Backone。骨干模型具有唯一的 ID(cid 和 idAttribute),可以识别后端的模型。但是据我所知,Backbone 集合没有具有唯一标识符,这就是我提出以下文本其余部分中出现的问题的原因之一:

在 MongoDB 中,集合的名称为字符串,表示它们的唯一标识符。将 MongoDB 中的集合字符串名称与前端 Backbone 集合的某种唯一字符串名称匹配的最佳方法是什么?

Backbone 集合是否有某种唯一标识符?创建一个的最佳方法是什么?

我问的原因是因为通常我们使用集合的 URL 属性将 Backbone 集合与后端匹配。但是,我开始在我的应用程序中加入套接字(socket.io)。它是这样的:我有一个辅助服务器(与应用程序服务器分开),它监听 MongoDB oplog。在 oplog 中发生插入/更新/删除事件时,辅助服务器会向我的前端发送一条带有 BSON/JSON 信息的套接字消息,其中包含:<dbname>.<collectionname>。比如:mainDB.users_collection

所以在我的前端,我需要将 Backbone 集合与 MongoDB 集合的文字字符串表示相匹配。现在,我可以在 Backbone 集合上设置一个属性,比如“uniqueName”,但我想知道是否有更好的做法。以前有人这样做过,我想向他们学习。好伤心。

【问题讨论】:

  • 每个 MongoDB 集合不是只有一个 Backbone.Collection 吗?并且尝试使用cid 来识别服务器端的模型并不能很好地工作,所以不要考虑它。
  • 我没有使用 cid 的任何东西,只是使用 MondoDB _id 的。但问题依然存在。是的,或多或少,前端 Backbone 集合和 MongoDB 集合之间的比例是 1:1。
  • 那么为您的 Backbone 集合使用名称有什么问题? whatever = Backbone.Collection.extend({ ... }) 之类的?
  • 我想你明白我的观点,模型有 cid/id,但集合没有。我只是在寻找关于如何为集合创建唯一标识符的最佳实践?
  • 我用过的大多数 Backbone 集合都只有变量——它们的名称是它们的唯一 ID。您是否试图拥有一个集合或类似变量名不足的集合?如果是这样,您也许可以定义一个模型类型,该模型类型包含一个集合,该集合的 id 具有正确的名称。

标签: javascript node.js mongodb backbone.js


【解决方案1】:

将 Backbone 与套接字集成的最常见方法是更改​​ Backbone.Sync 对象。默认的 Sync 假定使用传统的 REST API,并且在使用不同的后端时需要更改。

或者,您可以使用现有插件,例如 https://noveogroup.github.io/backbone.iobind/

【讨论】:

  • 到目前为止,我只是保留了 Backbone 的标准 HTTP REST 配置,并编写了自己的功能来处理实时套接字更新。换句话说,我只使用 socket.io 监听更新,我不使用 socket.io 将任何东西从客户端保存到服务器。似乎是最简单的方法,如果您不聊天,可能涵盖 80% 的用例。 socket.io 连接似乎一直被丢弃,所以我质疑使用 socket.io 而不是 HTTP 将数据保存到服务器的可靠性......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
相关资源
最近更新 更多