2016-02-26 206 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