Url rewriting 如何在URL重写中使用CouchDB用户名?

Url rewriting 如何在URL重写中使用CouchDB用户名?,url-rewriting,nosql,couchdb,rewrite,Url Rewriting,Nosql,Couchdb,Rewrite,我有一个列表函数,可以这样访问: _list/characters/characters_by_user?startkey=["org.couchdb.user:rodriguez"]&endkey=["org.couchdb.user:rodriguez", {}] 我正在尝试重写URL,以便您可以以更友好的方式访问它 /rodriguez/characters …通过编写此规则: {from: '/:user/characters', to: '_list/characters/

我有一个列表函数,可以这样访问:

_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)的方式存在缺陷。我正在等待邮件列表的回复,并将相应地更新此问题

我发现检查CouchDB的日志被证明是解决URL重写问题的最佳方法。不幸的是,我提交给CouchDB邮件列表的问题尚未得到回复

作为一种解决方法,我在不完全限定用户名的情况下发出了用户名,这符合我的目的:

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

嗯……我会尽力帮助诊断,但我不确定答案。重写过程中很有可能出现错误,而实际上重写的任何内容都会产生您看到的错误。也就是说,为什么这里有一个冒号“{from:'/:user/characters”“。还有,你有没有试过去掉那些%2f?你是在CouchDB 1.2上运行的?还有,也许可以试试?key=“org.CouchDB.user:rodriguez”我同意,重写过程中似乎确实出现了错误。我如何看到它被重写成了什么?Chrome developer tools上是否有什么东西或将其输出到控制台的方法?冒号表示一个变量,如这里所述。我尝试过使用和不使用URL编码,并收到了相同的结果(虽然我必须使用编码来表示org.couchdb.user:username中的冒号,因为我无法在字符串中转义它)。我使用的是couchdb 1.1.1.Hmmm…如果您还没有发现这一点,它可能会对您有所帮助:它详细介绍了如何使用变量进行重写。