【问题标题】:CouchApp without Server side or CouchDB backend with xdomain issues?没有服务器端的 CouchApp 或带有 xdomain 问题的 CouchDB 后端?
【发布时间】:2011-05-09 00:42:21
【问题描述】:

我玩 CouchDB 和 CouchApp 已经有一段时间了。我正计划将它用于我正在处理的新网站项目。

  1. 从可扩展性的角度来看,我喜欢 CouchApp 的想法。

    缺点是在没有服务器端代码的情况下,有些事情(如 oAuth 身份验证)很难在客户端完成。在某些时候,我确定我需要一些描述性的服务器端代码——我想你可以看看 Node.js,但现在不想。

  2. 将 CouchDB 纯粹用作后端解决方案,而您的页面由另一台服务器提供服务也是一个很好的选择,但这里的缺点是跨域问题使您无法轻松使用内置的 CouchDB API。

那么有人有解决这两个缺点之一的方法吗?

您能否以某种方式从 CouchApp 提供服务器端代码(即使是 PHP 也会胜出),或者您能否以某种方式使用单独的站点来提供您的页面但克服跨域问题?

我真的在努力使解决方案尽可能简洁(并且尽可能可扩展),而 CouchDB 的一大优点是超级简单、超级快速的 API,所以我真的不想在它周围使用包装器 -除非它不妨碍性能/可扩展性。

欢迎您的意见。

【问题讨论】:

    标签: couchdb couchapp


    【解决方案1】:

    由于 CouchDB 使用基于 HTTP 的 API,因此有多种方法可以将服务器端代码(node.js、PHP 等)与您的 CouchApp“混合搭配”。

    我将选项分为三类:

    1. 首先,您现在拥有的是 2 层架构:从 CouchDB 提供的浏览器 + CouchApp。对于只需要浏览器和 CouchDB 可以提供的应用程序来说,这是一个很好的解决方案,但是一旦您需要发送电子邮件、调整图像大小或从另一个不需要的数据库获取数据,您就需要另一层有一个 HTTP API(MySQL、MongoDB 等)。
    2. 接下来是 3 层架构:浏览器 + Apache/PHP(或类似堆栈)+ CouchDB。这是更“传统”的选项(即 LAMP)。这对于逐步迁移到 CouchDB 来说很好,但从长远来看,必须通过第二个 HTTP 服务器(也许作为代理)或像 PHP 这样的服务器端脚本语言来路由所有内容会变得很麻烦。
    3. 最后也是我最喜欢的是 2.5 层架构:浏览器 + CouchDB + 外部或 _changes 基于提要的“操作”。在这种情况下,PHP(或类似的)充当 CouchDB 的某种服务提供者。可以通过让 PHP 监视某些类型的文档及其更改(即图像上传、电子邮件文档)的 _changes 提要来触发操作,或者可以将 CouchDB 设置为“ping”一个 _external 处理程序以对文档进行进一步处理或其附件。这实质上就是 couchdb-lucene 的工作原理,它通过监视更新并在更新发生时或定期对其采取措施。

    您可以在下面找到有关 _changes 提要和 _external 处理程序的更多信息:

    不管它的价值如何,我将在本周三通过PHP and CouchDB Webcast 讨论这三个选项。您的问题将成为网络直播结束时讨论的重要补充。

    我很想知道您的 CouchApp 的结果如何,以及您如何解决上述问题。

    【讨论】:

    • 太好了,我肯定会在星期三收听...我目前处于非常早期的阶段,但只是想知道如何在没有服务器端选项的情况下进行社交 oAuth...我可能倾向于选项 2 目前虽然选项 3 肯定有好处。
    【解决方案2】:

    来自 BigBlueHat 的出色回答,但我还有另外一个可能的选择:

    克服跨域问题,从而允许您从任何类型的 Web 服务器提供页面,并允许浏览器直接与 CouchDB(可以在另一台服务器上)交互。

    浏览器强制执行的跨域限制并不难解决。 我知道的两种主要方法是:JSONP 和 CORS。

    JSONP 将每个请求伪装成“脚本”请求(因为脚本请求不受跨域规则的约束)。它仅适用于 GET,不适用于 POST 或 PUT 或其他任何东西。你可以用 jQuery 来做。

    CORS 是“跨源资源共享”,它只是一个特殊的 HTTP Header,必须在服务器(本例中为 couchdb)上实现,它告诉浏览器它没问题——它不介意服务请求来自另一个域。我已经对此进行了测试,它确实有效,但可能存在安全问题——我不确定。

    所以...我不知道这是否是一个好主意,但在技术上(至少部分)克服 CouchDB 的跨域限制在技术上是可能的。有没有人使用这种设置构建过系统?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-02
      • 2022-10-13
      • 2018-05-17
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多