CouchDB - CouchApp 的任何替代品?

Posted

技术标签:

【中文标题】CouchDB - CouchApp 的任何替代品?【英文标题】:CouchDB - any alternatives to CouchApp? 【发布时间】:2015-07-26 00:09:32 【问题描述】:

所以我最近一直在阅读有关 CouchDB 的文章,我真的很喜欢它。它看起来很简单,但很灵活,我喜欢 RESTful 界面。但是让我们面对现实吧——除非你正在构建一个 SAP,否则你会希望你的应用程序使用对 SEO 友好的 URL 来提供静态 html,而不是持续的 HTTP 请求。我还没有在任何项目中实际使用过 CouchDB,但我很想在不久的将来探索它。

问题是:如何使用它来构建静态 HTML 网站,例如博客?我想将我所有的博客文章存储在 CouchDB 中,然后根据类别、标签和日期将它们作为 HTML 提供。如果我理解正确的话,我会在我的设计文档中定义一组shows。因此,例如,在一个设计文档中,对于“工作”类别中的所有帖子,我还将为 show 模板添加一个单独的函数。但是,我在将我的 HTML 存储在 JSON 文件中的 javascript 函数中时遇到了一点问题!维持这听起来非常痛苦。我快速浏览了 CouchApp,它似乎解决了这个问题,但它似乎并没有处于积极开发中,因此我对其他可能的解决方案提出了疑问。

我希望能够像往常一样构建我的 HTML / CSS / JS,但如果可能的话,无需任何外部后端即可利用 CouchDB 的优势。甚至更好 - 我希望将我的 databases 实际定义为 JSON 文件,我的 map 用作常规 .js 文件并为其他所有内容保持经典目录结构,所以例如:

db/data - 这包含 CouchDB

db/maps - 这包含我的地图功能

public/ - 这包含其他所有内容,包括其他 JS、CSS 和 HTML,如下所示:

public/css
public/js
public/categories.html
public/posts.html
public/index.html

等等

关于如何实现这一目标的任何想法?或者是否有可能?

附赠问题:谁能这么好心地解释一下reduce函数是什么?它们是 sumcount 函数的 SQL 等价物吗?我什么时候会真正使用 reduce 函数?我什么时候需要编写自定义的?

谢谢!

【问题讨论】:

【参考方案1】:

CouchDB 是专为 Web 设计的数据库,它是开箱即用的 RESTful API,这就是 CouchApps 如此简单、开发速度快且不需要后端的原因,因为 CouchDB 实际上就是您的后端。

我知道很难维护从 CouchDB 推送的 HTML,它也很昂贵,所以我构建 CouchApps 的方式是使用 Backbone 创建一个前端应用程序,管理我所有的路由(友好的 URL),使用模板(任何模板框架,我使用简单的 requirejs !text),并像普通的 HTML/CSS/JS 一样开发应用程序,对 CouchDB 视图进行 Ajax 调用(使用列表转换数据,所以只需返回干净的 JSON),如果我想要一个特定的文档也可以这样做,只需使用 Shows,我就会再次获得 JSON 数据。

所以最后是作为一个 Web 应用程序与 RESTful API 对话并解释该数据以根据需要显示它。

然后您将该应用程序推送到 CouchDB(现在它是一个 couchapp),因此 CouchDB 它实际上将您的应用程序提供给最终用户,并将 API 提供给您的应用程序。

减少: 这是一个强大的算法,正如你所说的与 SQL sumcount 等价,你在 CouchDB 中也有这些算法(_sum_count_stats)。 我建议您阅读此链接以了解 reduce 和 rereduce。

http://www.ramblingincode.com/building-a-couchdb-reduce-function/

【讨论】:

感谢您的回答。我一直在环顾四周,似乎对 CouchApp 的内部工作没有很好的解释。你有任何链接吗?根据我收集到的信息(零碎),您可以从 Couch 提供一个 index.html 页面,该页面存储为附件。在该页面中,您可以向 Couch 视图/列表/显示/等发出 AJAX 请求,然后在该单个 index.html 页面上使用它们。这是相当强大的。其他问题。如何使附件 URL 更具吸引力? Couch 如何处理其他文件等。【参考方案2】:

还有一个基于 nodejs 的工具,也称为 couchapp - 这是我选择的工具。 here。它稳定且久经沙场。

因为在一天结束时,您可以导出一个作为设计文档的模块,您可以创建任何您喜欢的结构。

使用涉及webpackcouchapp 的npm 脚本进行一些智能设置,您可以在ES6 中使用箭头函数、常量和其他内容编写视图,将它们转换为CouchDB 中的greasemonky 可以理解的ES5,然后将它们部署到您在单线 npm-script 中选择的数据库(您显然可以变得更漂亮......)

【讨论】:

【参考方案3】:

基于 Python 的 CouchApp 工具的替代品是基于 Erlang 的 Erica 工具。实际上前者现在是deprecated。

【讨论】:

不确定“已弃用”的说法是否属实。似乎 couchapp 比 Erica 更新得更晚,但是两者都存在最新版本的环境(python3 和 erlang)问题。

以上是关于CouchDB - CouchApp 的任何替代品?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CouchApp 对 CouchDB 进行 TDD?

列出 CouchDB 中的所有 CouchApp?

从 CouchApp 发布数据库视图

如何从 CouchDB 中提取 CouchApp

Couchapp - 从 couchdb 中删除文档

couchdb - 将遗留身份验证模块集成到 couchapp