【问题标题】:Offline apps with Node.JS and CouchDB使用 Node.JS 和 CouchDB 的离线应用程序
【发布时间】:2012-08-29 00:51:48
【问题描述】:

我有一个想要创建的应用程序。但我不知道该怎么做。我正在使用 node.js 并且想使用 couchdb,但是如果像 mongodb 或 riak 这样的东西会是更好的选择,我愿意听取想法。但是,我有一个网站,比如说

酷网

上面有一个 couchdb 实例,以及一个管理商店的站点。说一个购物车。数据库包含商店的所有商品和数据。该应用程序本身有一个管理后端来管理该数据并可以更改项目。我希望能够做的是能够让用户与互联网断开连接,并且仍然可以进行管理后端工作。我意识到要使其正常工作,我需要将客户端框架与我的模型/路由/控制器/任何东西一起使用。但我不确定的是如何让网站在离线时运行。如果在本地安装 couchdb 可以在重新联机时将数据从本地同步到远程,如果管理员用户在计算机上,我可以让他们安装沙发。但这可能会很混乱。

另外,如果管理员用户使用的是平板电脑或手机怎么办?我需要一个实际的移动应用程序和一个桌面应用程序来执行此操作吗?有什么方法可以设置它,以便最终用户无缝连接。我也希望最终用户也可以离线使用,但更大的受众是管理员。

另一个用例,店内 POS 系统。电源熄灭。但是 POS 系统可以从网络加载到平板电脑上,如果 wifi 不可用,他们仍然可以进行基于卡的销售,因为该应用程序可以离线使用。

我只是不知道该怎么做。假设我需要一个可以处理数据和后端的客户端框架。像余烬或棱角分明的东西。还有像meteor 和derby js 这样的all in one stack,但那些不是完全离线的,而是为了实时的出现。虽然流星确实有迷你 mongo,所以它可能值得研究。

我希望有人能帮我弄清楚如何让这个设置工作,最好是在沙发上,但如果我有办法同步数据,其他 nosql 也可以工作。

【问题讨论】:

  • 您所说的基于卡的销售是什么意思?你的意思是用信用卡付款吗?
  • 是的。因此,店内销售点系统。它将采用多种付款方式。
  • 你最后做了什么?
  • 我还在调查。我周末的大部分时间都在远离我的电脑。我目前正在研究 pouchdb,它应该能够集成到我的应用程序中。但是没有很多关于如何开始的文档。我一定会在这里回复我的发现。

标签: node.js mongodb couchdb offlineapps offline-browsing


【解决方案1】:

我不确定它是否适合您,但我已经考虑这样的应用程序很长时间了,并且一直在研究可行的方法。我能想出的最佳解决方案是使用带有 couchdb 的服务器并基于客户端编写应用程序。然后对于数据存储使用pouchdb 并定期将 pouchdb 与您的服务器端 couchdb 同步(如果应用程序在线)。我知道邮袋处于早期阶段,尚未准备好生产,但如果你愿意投入一些工作,我会说它是可行的。

【讨论】:

  • pouchdb 看起来也很有希望。我真的很喜欢这个。如果它可以与@charlie 提到的 app.js 捆绑在一起,那将是一个加号。
  • @luckysmack 你实际上并不需要用于 PouchDB 的 AppJ,它在浏览器中的 IndexedDB 上运行(或 Chromium Embedded 或任何你运行它的地方),还计划支持 WebSQL 和 LocalStorage 以实现向后兼容性。
  • 是否有任何文档可以完成此操作?如果最后我不使用 app.js 而只使用内置浏览器的用户怎么办?还是别的什么?
  • 在沙发上与某人交谈 (irc),pouchdb 不适用于我的用例。我需要实际嵌入数据库。但是在环顾四周和研究时,我将使用 mongo 或 orienddb,我在另一条评论中对此进行了解释。
【解决方案2】:

如果您希望客户端在离线和上线时能够顺畅工作(例如断电的 POS),那么 我建议您让应用主要在本地存储上工作,并通过后台发布或同步到云端.

本地存储选项可以是任何东西,从像 sqlite、sqlexpress、firebird 这样的轻量级到像 mongo、couchdb 等没有 sql 选项......

但对于客户端或设备,请考虑配置的简易性和选项的重量。您还需要考虑客户端的类型——您是否有许多平台,从设备到 PC 不等?您不想要具有大量配置和运行时占用空间的东西。在服务方面很好。

在服务方面,请考虑您的数据的性质,以及它是否更适合交易/关系系统(银行等)或最终一致/非交易 (no-sql) 文档。不要忘记混合动力作为一种选择。还要考虑服务平台 - 例如,node 与 mongodb 配合得很好(从前到后的 json 对象)...

设备和服务存储选项可以不同(并且可能应该)由服务接口(soap、rest/http、套接字等)分开。

很难有一个适合所有解决方案的解决方案,但通常在设备或客户端上轻量级的东西(如 sqlite)便于安装/配置,而在服务端使用 sqlserver/mysql 或 couchdb/mongodb 等可扩展性是有意义的.

一些阅读链接:

您的问题非常广泛,没有一种适合所有解决方案的尺寸。希望我提供了一些可供考虑的选项。

【讨论】:

  • 我也曾考虑过本地化。基本上制作了2个应用程序。站点和服务器。两者都可以使用非常相似的api,这会更容易。实际上,系统的一部分将是一个 POS 界面,* 应该 * 可以在平板电脑上使用。我想我也许可以强迫他们使用在线版本。桌面需要能够离线(再次,POS)。如果我可以离线使用移动设备,那就太好了(phonegap?)。如果我需要构建几个单独的应用程序,我只需要它在整体上尽可能无缝。
  • 您可以围绕 sqlite 整合设备/PC(它是多平台 - 共享 sql 代码)和围绕任何有意义的存储选项(mongo/couchdb)的服务端。我发现 mongo 适合 node,但没有玩过 couchdb。
  • 我在想,只向管理员提供离线应用程序,并且仍然需要凭据来设置同步。然后在站点上它可以在本地检查数据库并等待它同步。完成后,它使用本地的。如果没有本地副本,则使用在线数据库。这样它是一个应用程序,我只为本地数据库提供某种包。但这仍然让我质疑我将如何处理移动问题。强迫他们上网?或制作移动应用程序。沙发显然有一个移动客户端正在为沙发工作,他们说他们正在工作,这也可能是一个答案。
  • 是否有任何库可以从 sqlite 获取数据并将其推送到服务器?如果是这样的话,我可以将它用于真正的本地存储,并找到一种方法在在线时将其推送并将数据推送到 monogo/couch。您将不得不将其视为解决方案。因为本地数据库也可能很大。
  • 我认为很难有一个适合所有通用数据/同步模型的尺寸。通过 http 服务抽象服务器也很有价值。数据和应用规则差异很大 - 祝你好运。
【解决方案3】:

有一个名为 AppJs (http://appjs.com/) 的有趣项目,它将 Node.JS 和 Chrominium 打包为桌面环境。它目前非常新鲜(文档很少),但看起来很简单(您将使用与在线申请相同的工具)。

关于同步离线和在线环境。我怀疑您是否可以按照您设想的方式依赖 CouchDB。 CouchDB 移动支持并不像某些文档所建议的那样全面。所以从这个意义上说,它与使用 SQL/Mongo/Punchcards 没有什么不同。

如果基于 XML 或 JSON(或纯文本)设计合适的序列化方案,并在在线和离线安装之间传递文件,您可能会更幸运。

编辑 - 自从撰写本文以来,Node Webkit - http://nwjs.io/ - 显然是 App.js 最明显的替代品。它有一个非常简单的 API 和一些很棒的功能。

【讨论】:

  • hrmm,app.js 看起来非常适合。你知道它是否也有捆绑服务器的能力吗?如果我能让它捆绑沙发实例,那就完美了。
  • 请注意,我将 app.js 用于我的应用程序的桌面实例。和手机的phonegap之类的东西。虽然我知道我还有其他问题需要解决本地数据库。但暂时因为它只会安装在几台电脑上,我可以简单地创建一个命令脚本来手动安装数据库,然后找到一个解决方案来正确打包它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2013-09-21
  • 2015-11-01
相关资源
最近更新 更多