Pass array in querystring in Node.js

Zim picture Zim · Mar 8, 2012 · Viewed 9.1k times · Source

I'm using Node.js with Cradle to call a CouchDB update handler. I need to pass an array in the querystring, but when I read the req.query object in CouchDB, only the first array value is available. So, for example using Cradle .update method:

db.update("myview/myupdate", id, {title:'sometitle',tags:['one','two']}, function }...

But when I check the QS value passed to CouchDB it's:

?title=sometitle&tags=one&tags=two

Then in the CouchDB update function, req.query.tags only gives me "two". I noticed that Cradle uses require("querystring") to do the "querystring.stringify", so I also tried visionmedia's require("qs") but then "qs.stringify" gives me:

?title=sometitle&tags[]=one&tags[]=two

It would seem that CouchDB wants the tags array passed as:

?title=sometitle&tags=["one","two"]

How can I build a querystring that looks like that?

Answer

Vadim Baryshev picture Vadim Baryshev · Mar 8, 2012

You may use Connect and his query middleware.

npm install connect
var connect = require('connect');

var server = connect();
server.use(connect.query());
server.use(function (req, res, next) {
    res.end(JSON.stringify(req.query));
});
server.listen(3001);

Point your browser to http://127.0.0.1:3001/?tags=tag1&tags=tag2&tags=tag3

You will see: {"tags":["tag1","tag2","tag3"]}