没有服务器端的CouchApp或具有xdomain问题的CouchDB后端?

时间:2010-11-12 11:36:56

标签: couchdb couchapp

我一直在玩CouchDB和CouchApp一段时间了。我正计划将它用于我正在开发的新网站项目。

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

    缺点是没有服务器端代码,有些东西(比如oAuth身份验证)在客户端很难做到。在某些时候,我确信我需要一些描述的服务器端代码 - 我想你可以看看Node.js,但不想在这一点上。

  2. 使用CouchDB作为后端解决方案,而您的页面是从另一台服务器提供的,这也很合适,但缺点是跨域问题阻止您轻松使用内置的CouchDB API。

  3. 那么有没有人能解决这两个缺点之一?

    你能不能以某种方式为CouchApp提供服务器端代码(甚至PHP会赢),或者你能以某种方式使用一个单独的网站来服务你的网页但是能够克服跨域问题吗?

    我真的试图让解决方案尽可能干净(并且可扩展),而CouchDB的一个好处是超级简单,超快速的API,所以我真的不想使用它的包装器 - 除非它不妨碍性能/可扩展性。

    欢迎您的意见。

2 个答案:

答案 0 :(得分:16)

因为CouchDB使用基于HTTP的API,所以有几种方法可以将服务器端代码(node.js,PHP等)与CouchApp“混合和匹配”。

我将选项分为三类:

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

    为了它的价值,我将在周三PHP and CouchDB Webcast讨论这三个选项。您的问题将成为网络广播结束时讨论的重要补充。

    我很想知道你的CouchApp结果如何,以及你如何解决上面提到的问题。

答案 1 :(得分:1)

BigBlueHat的优秀答案,但我还有一个可能的选项:

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

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

JSONP将每个请求伪装成“脚本”请求(因为脚本请求免于跨域规则)。它仅适用于GET,而不适用于POST或PUT或其他任何内容。你可以用jQuery做到这一点。

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

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