2012-04-06 7 views
3

J'ai une fonction de liste qui peut être accessible comme ceci:Comment utiliser un nom d'utilisateur CouchDB dans une réécriture d'URL?

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

Je tente de réécrire l'URL afin que vous puissiez y accéder de manière conviviale ...

/rodriguez/characters 

.. .en écrit cette règle:

{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{}]" 
    } 
} 

Cependant, je reçois cette erreur:

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

Pourquoi la requête fonctionnerait correctement dans l'URL complète, mais n'utiliserait pas la réécriture?


Mise à jour

Je crois que ce peut être un bug avec la façon dont CouchDB gère le côlon codé (% 3A). J'attends une réponse de la liste de diffusion et mettra à jour cette question en conséquence.

+0

Hmmm ... Je ferai de mon mieux pour aider à diagnostiquer, mais je suis pas certain sur une réponse. Il est très possible qu'il y ait une erreur dans la réécriture, et quoi que ce soit en train de réécrire pour produire l'erreur que vous voyez. Cela étant dit, pourquoi y at-il un deux-points ici "{from: '/: user/characters'". Aussi, as-tu essayé de sortir ces% 2f? Courez-vous ceci sur CouchDB 1.2? – Costa

+0

Aussi, peut-être juste essayer? Key = "org.couchdb.user: rodriguez" – Costa

+0

Je suis d'accord, Il semble certainement qu'il y ait une erreur sur la réécriture. Comment est-ce que je vois ce qu'il réécrit? Y at-il quelque chose sur les outils de développement Chrome ou un moyen de le sortir sur la console? Le deux-points est là pour représenter une variable, comme indiqué ici http://wiki.apache.org/couchdb/Rewriting_urls. J'ai essayé avec et sans l'encodage d'URL, et reçois le même résultat (bien que je doive utiliser l'encodage pour représenter le deux-points dans org.couchdb.user: nom d'utilisateur car je ne peux pas l'échapper dans la chaîne). J'utilise CouchDB 1.1.1. –

Répondre

0

J'ai trouvé que la vérification des journaux de CouchDB s'est révélée être le meilleur moyen de résoudre le problème de la réécriture des URL. Malheureusement, le problème que j'ai soumis à la liste de diffusion CouchDB n'a pas encore reçu de réponse.

Pour contourner ce problème, je l'ai complètement sans émis admissible, le nom de l'utilisateur qui convient à mon but:

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