2016-02-26 203 views
0

如果可能,我如何使用PouchDB Server实现以下URL重写?重写CouchDB/PouchDB-Server中的URL

/index.html,显示/index/_design/index/_show/index.html的HTML输出。

/my_database/index.html,显示器/my_database/_design/my_database/_show/index.html

我的目标是使用PouchDB(并最终CouchDB)作为独立的Web服务器。

我在努力将rewrite documentation翻译成工作代码。

+0

你想使用一个_rewrite端点来访问多个数据库(这是它看起来像这里)?我不确定PouchDB服务器如何处理它,但CouchDB默认情况下不允许。否则,关键要记住的是,所有“to”值都与包含“rewrites”键的设计文档相关,因此“”to“:”_show/index.html“' – BigBlueHat

+0

我很高兴重写规则在不同的数据库中。我真的只需要一个完整的重写文档示例,因为我没有运行实现文档中显示的部分片段。 – MattMS

+0

你能否解释一下你想要完成的事情?它看起来像你可能过度使用的数据库部门和显示功能。想知道更多,所以我可以帮助更好! :) – BigBlueHat

回答

1

Apache CouchDB使用HTTP API(因此)可以用作静态Web服务器 - 类似于Nginx或Apache HTTPD,但还有额外的好处,您还可以使用MapReduce视图,复制以及其他位了解Apache CouchDB。

仅给出核心API,您可以将整个静态网站作为附件存储在单个JSON文档中,并通过它自己的URL为每个文件提供服务。如果单个文档是_design文档,那么您将获得重写器的附加价值。

下面是一个例子人造 JSON文件,将做到这一点:

{ 
    "_id": "_design/site", 
    "_attachments": { 
    "index.html": { 
     "content_type": "text/html", 
     "data": "..." 
    }, 
    "images/logo.png": { 
     "content_type": "image/png", 
     "data": "..." 
    }, 
    "rewrites": [ 
    { 
     "from": "/", 
     "to": "index.html" 
    } 
    ] 
} 

"data": "..."的实际价值将编码文件的版本中的Base64。请参阅CouchDB Docs中的Creating Multiple Attachments示例。

您还可以使用CouchDB的管理用户界面,例如Futon或Fauxton - 可在http://localhost:5984/_utils处获得 - 两者都提供文件上载功能。但是,这些系统将要求首先存在JSON文档,并将PUT the attachment直接放入数据库中。

完成后,您可以在CouchDB(或Cloudant)中设置virtual host条目,该条目指向该设计文档中的_rewrite端点。像这样:

[vhosts] 
example.com = /example-com/_design/site/_rewrite/ 

如果你不是80端口上托管,那么你就需要在http://example.com:5984/请求的网站。

使用_show函数(如您的示例中所示)仅在您希望将JSON转换为HTML(或不同的JSON,XML,CSV等)时才是必需的。如果你只想静态托管,那么上面的选项非常有效。^_^

还有很多用于创建这些文档的工具。 couchapp.pycouchdb-push是我最常用的,并且都支持CouchApp filesystem mapping "spec"

希望有帮助!

+0

真棒,谢谢!我错过了'vhosts'部分,所以找不到重写。我还必须上传'index.html'而不是给出'_attachments'对象(我假设你的意思是人造的json)。也许值得用这些要求更新答案? – MattMS

+0

我的不好。你确实需要base64对'data'的值进行编码,即使它接下来很简单:http://docs.couchdb.org/en/1.6.1/api/document/common.html#creating-multiple-attachments看起来你使用Futon或Fauxton上传 - 这太棒了! - 它可能直接将文件放入http://docs.couchdb.org/en/1.6.1/api/document/attachments.html#put--db-docid -attname – BigBlueHat

+0

@MattMS,我更新了匹配的答案。希望清除任何混乱!干杯。 – BigBlueHat