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

3

我有一个列表函数可以通过以下方式进行访问:

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

嗯...我会尽力帮助诊断,但我不确定答案。重写中很可能存在错误,而实际重写所产生的错误可能导致您看到的错误。话虽如此,为什么这里有一个冒号“{from: '/:user/characters'”?另外,您是否尝试过去掉那些%2f?您是在CouchDB 1.2上运行吗? - Costa Michailidis
另外,也许只需尝试一下 ?key="org.couchdb.user:rodriguez" - Costa Michailidis
我同意,重写似乎出现了错误。我如何查看它的重写内容?在Chrome开发者工具中有什么东西或者有一种方法可以将其输出到控制台吗?冒号用于表示变量,如此处所述http://wiki.apache.org/couchdb/Rewriting_urls。我已经尝试过使用和不使用URL编码,并且收到了相同的结果(尽管我必须使用编码来表示org.couchdb.user:username中的冒号,因为我无法在字符串中转义它)。我正在使用CouchDB 1.1.1。 - Matt Norris
嗯...如果你还没有找到这个,它可能对你有帮助:http://blog.couchbase.com/what%E2%80%99s-new-apache-couchdb-011-%E2%80%94-part-one-nice-urls-rewrite-rules-and-virtual-hosts。它更详细地介绍了如何使用变量进行重写。 - Costa Michailidis
1个回答

0

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

作为一种解决办法,我已经发出了用户的名称,但没有完全限定它,这符合我的目的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接