-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hey folks. I've asked this in a couple different IRC channels and on
the couchapp list, but never received an answer. So I'm assuming that
this list has a broader subscriber base, and that perhaps someone here
can help.
I'm trying to migrate my blog into a couchdb, and trying to serve it
up via a couch app. I'm doing it from scratch both as a learning
experience, and because there are some aspects of Sofa that I don't like.
One such is its permalinks. My existing blog has a fairly generic
permalink structure (I.e.):
/yyyy
/yyyy/mm
/yyyy/mm/dd
/yyyy/mm/dd/article-title/
/about
/contact
...
I've migrated all of my posts into the database, and I have the
date-based permalinks working nicely via a byDate view. I'm failing on
page/article permalinks, though. Here's the map view I'm using:
function(doc) {
// !code lib/util.js
emit(permalink(doc), doc)
}
And the permalink() functions. I'm new to JS, so pardon any newbie-isms:
function normalizeString(str) {
return str.toLowerCase().replace(" ", "-").replace(/![a-z0-9]/, "")
}
function pad(n) { return (n < 10) ? "0"+n: n.toString() }
function permalink(doc) {
if(doc.permalink)
return "/"+doc.permalink
else if(doc.type && doc.type == "post") {
var createdAt = new Date(doc.createdAt)
var title = normalizeString(doc.title)
var month = pad(createdAt.getMonth()+1)
var day = pad(createdAt.getDate())
return "/"+createdAt.getFullYear()+"/"+month+"/"+day+"/"+title+"/"
} else {
return "/"+doc._id
}
}
If I hit the view directly, I get back a list of permalinks:
{"total_rows":14,"offset":0,"rows":[
{"id":"13e93fae-1dee-4805-8de0-66d8dc2f7c3f","key":"/2009/07/02/announcing-utterance/","value":{"_id":"13e93fae-1dee-4805-8de0-66d8dc2f7c3f","_rev":"14-bd7c1b4494b1190a05bb09c9fc1e8c2a","body":"No,
this isn't the major post I
...
And if I hit the view with a permalink key, I get back the specific
document:
I also have a list function that renders articles to pages. I can hit
this list function with a permalink as the key and it works.
I can't for the life of me get a rewrite rule to work with this,
though. The closest I've come is:
{
"from": "/:year/:month/:day/:title",
"to" : "_list/page/permalink",
"query": {
"key": "\":year/:month/:day/:title\""
}
},
curl
localhost:5984/blog/_design/blog/_rewrite/2009/07/02/announcing-utterance/
(with and without final /)
And when I say that's the best, I mean that it returns HTML. I just
get a page with my header and footer, but nothing for the page content
(I.e. a blank spot where the article should be.) At least it doesn't
tell me my JSON is invalid. I've also tried including or excluding /
on the ends of the key. I don't even know if the rewrite rules include
those in the beginning and end, but either I didn't do something
correctly or something is horribly broken, because no permutation of /
seemed to make a difference.
I've been working at this for over a week. Can anyone point me in the
right direction? I've read the wiki, but there's a bit of a last mile
issue in so much of the docs, as they'll mention that something sends
"req" as a parameter, only you have to visit another non-linked-to
page to find out what form that takes. The rewrite docs include lots
of a=b,c=d types of examples, but practical ones would be more helpful
to me. I'm wondering, for instance, if I can just use "*" instead? Not
all of my articles will be posts, and I'd like to link to
explicitly-set permalinks if possible. Or do I need to store
permalinks as an array of path components?
If there's anything else I can provide then let me know.
Thanks.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAkzbcfIACgkQIaMjFWMehWKKkQCgh5vqLMbR0OaudaICKLoHS06Q
40cAmwe01JytI1XczjYFqUg5MU2Iiobn
=tlxj
-----END PGP SIGNATURE-----