2012-04-06 48 views
3

我有可以這樣訪問列表功能:如何在URL重寫中使用CouchDB用戶名?

_list/characters/characters_by_user?startkey=["org.couchdb.user:rodriguez"]&endkey=["org.couchdb.user:rodriguez", {}] 

我試圖重寫URL,這樣你可以在一個友好的方式訪問它...

/rodriguez/characters 

.. 。通過寫這條規則:

{from: '/:user/characters', to: '_list/characters/characters_by_user', 
    query: { 
     startkey: "[%22org.couchdb.user%3A:user%22]", 
     endkey: "[%22org.couchdb.user%3A:user%22,%20{}]" 
    } 
} 

不過,我得到這個錯誤:

error: "query_parse_error", 
reason: "No rows can match your key range, reverse your start_key and end_key or set descending=true" 

爲什麼查詢在完整URL中正常工作,但沒有使用重寫?


更新

我相信,這可能是使用CouchDB處理編碼的結腸(%3A)的方式中的錯誤。我正在等待郵件列表的回覆,並相應地更新此問題。

+0

嗯......我會盡我所能來幫助診斷,但我不能確定答案。重寫過程中出現錯誤的可能性很大,無論是實際重寫還是產生了錯誤。這就是說,爲什麼這裏有冒號「{from:'/:user/characters'」。另外,你有沒有嘗試拿出這些%2f的?你在CouchDB 1.2上運行這個嗎? – Costa 2012-04-07 22:14:40

+0

另外,也許只是嘗試?key =「org.couchdb.user:rodriguez」 – Costa 2012-04-07 22:17:19

+0

我同意,它肯定似乎有重寫錯誤。我如何看到它重寫的內容? Chrome開發人員工具中是否有某些內容或將其輸出到控制檯的方式?冒號代表一個變量,如http://wiki.apache.org/couchdb/Rewriting_urls所示。我曾嘗試使用和不使用URL編碼,並收到相同的結果(儘管我必須使用編碼來代表org.couchdb.user中的冒號:用戶名,因爲我無法在字符串中將其轉義)。我正在使用CouchDB 1.1.1。 – 2012-04-09 01:24:25

回答

0

我發現檢查CouchDB的日誌證明是解決URL被重寫問題的最佳方法。不幸的是,我提交給CouchDB郵件列表的問題尚未得到答覆。

作爲一種變通方法,我已經發出了用戶的姓名不完全限定它,它適合我的目的:

var user = doc.createdBy.split(":")[1]; 
emit(user, doc);