所以我最近一直在阅读有关CouchDB的内容,我真的很喜欢它。它看起来如此简单,但又灵活,我喜欢RESTful界面。但是让我们面对它 - 除非您正在构建SAP,否则您希望您的应用程序使用SEO友好的URL而不是持续的HTTP请求来提供静态HTML。我还没有在任何项目中使用CouchDB,但我很想在不久的将来探索它。
问题是:如何使用它来构建静态HTML网站,例如博客?我想将所有博客文章存储在CouchDB中,然后根据类别,标签和日期将它们作为HTML提供。如果我正确理解这一点,我只需在设计文档中定义一组节目。例如,在'工作'中的所有帖子的设计文档中。类别,我还会为 show 模板添加一个单独的函数。但是,将我的HTML存储在JSON文件中的JavaScript函数中有一些问题!这听起来非常痛苦。我已经快速浏览了CouchApp,它似乎解决了这个问题,但它似乎没有积极开发,因此我对其他可能的解决方案提出质疑。
我希望能够像往常一样构建我的HTML / CSS / JS,但如果可能的话,可以利用CouchDB的优势,而无需任何外部后端。甚至更好 - 我希望将我的数据库定义为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 功能是什么?它们是sum
和count
函数的SQL等价物吗?我什么时候才能使用reduce函数?我什么时候需要写一个自定义的?
谢谢!
答案 0 :(得分:3)
CouchDB是为网络考虑的数据库,它是一个开箱即用的RESTful API,这就是为什么CouchApps如此简单,快速开发,并且不需要后端的原因,因为CouchDB它实际上就是你的后端。
我知道很难维护从CouchDB推送的HTML,它也很昂贵,所以我构建CouchApps的方式是使用Backbone创建一个前端App,管理我的所有路由(友好的URL),使用模板(任何模板框架,我使用简单的requirejs!文本),并将应用程序开发为普通的HTML / CSS / JS,使得Ajax调用CouchDB视图(使用Lists转换数据,所以只返回干净的JSON),如果我想要一个特定的文档做同样的事情,只需使用Shows,我再次获得JSON数据。
因此,最终将作为Web应用程序与RESTful API进行通信,并解释该数据以根据需要显示它。
然后你将该应用程序推送到CouchDB(现在它是一个couchapp),所以CouchDB实际上是为最终用户和应用程序API提供服务。
<强>减少强>
它是一个强大的算法,正如你所说的等同于SQL $this->addTab('images_uploader', array(
'label' => Mage::helper('adminhtml')->__('Images Uploader'),
'title' => Mage::helper('adminhtml')->__('Images Uploader'),
'content' => $this->getLayout()->createBlock('adminhtml/catalog_product_helper_form_gallery_content')->toHtml(),
));
和sum
,你在CouchDB中的那些算法也减少了(count
,_sum
,{{ 1}})。
我建议你阅读这个链接,了解减少和减少。
http://www.ramblingincode.com/building-a-couchdb-reduce-function/
答案 1 :(得分:1)
还有一个基于nodejs的工具,也称为couchapp
-这是我选择的工具。 here。它是稳定且经过战斗训练的。
从头开始,使用此工具导出的模块即设计文档,就可以创建所需的任何结构。
使用包含webpack
和couchapp
的npm脚本进行一些小巧的设置,您可以在ES6中使用箭头功能,const和其他内容编写视图,并将其转换为ES5,CouchDB中的油脂专家可以理解,并以sinlge-liner npm-script的方式将它们部署到您选择的数据库中(显然,您甚至可以得到更多……)
答案 2 :(得分:0)
基于Python的CouchApp工具的替代方案是基于Erlang的Erica工具。事实上前者现在是deprecated。