From 522909bcbf6ff577ddf66b8c07148cf581615157 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 5 Oct 2009 14:51:41 +0200 Subject: [PATCH] Parse queryString into req.uri.params --- doc/api.txt | 1 + lib/http.js | 22 +++++++++++++++++++++- test/mjsunit/test-http-server.js | 4 +++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/doc/api.txt b/doc/api.txt index 0b64c93..f766eca 100644 --- a/doc/api.txt +++ b/doc/api.txt @@ -679,6 +679,7 @@ Then +request.uri+ will be { full: "/status?name=ryan", path: "/status", queryString: "name=ryan", + params: { "name": "ryan" }, fragment: "" } ---------------------------------------- diff --git a/lib/http.js b/lib/http.js index 8282794..dc71698 100644 --- a/lib/http.js +++ b/lib/http.js @@ -129,7 +129,8 @@ function IncomingMessage (connection) { full: "", queryString: "", fragment: "", - path: "" + path: "", + params: {} }; this.method = null; @@ -140,6 +141,21 @@ function IncomingMessage (connection) { } node.inherits(IncomingMessage, node.EventEmitter); +IncomingMessage.prototype._parseQueryString = function () { + var parts = this.uri.queryString.split('&'); + for (var j = 0; j < parts.length; j++) { + var i = parts[j].indexOf('='); + if (i < 0) continue; + try { + var key = decode(parts[j].slice(0,i)) + var value = decode(parts[j].slice(i+1)); + this.uri.params[key] = value; + } catch (e) { + continue; + } + } +}; + IncomingMessage.prototype.setBodyEncoding = function (enc) { // TODO: Find a cleaner way of doing this. this.connection.setEncoding(enc); @@ -390,6 +406,10 @@ function createIncomingMessageStream (connection, incoming_listener) { if (info.method) { // server only incoming.method = info.method; + + if (incoming.uri.queryString.length > 0) { + incoming._parseQueryString(); + } } else { // client only incoming.statusCode = info.statusCode; diff --git a/test/mjsunit/test-http-server.js b/test/mjsunit/test-http-server.js index f2c521e..7495afa 100644 --- a/test/mjsunit/test-http-server.js +++ b/test/mjsunit/test-http-server.js @@ -16,6 +16,8 @@ http.createServer(function (req, res) { if (req.id == 0) { assertEquals("GET", req.method); assertEquals("/hello", req.uri.path); + assertEquals("world", req.uri.params["hello"]); + assertEquals("b==ar", req.uri.params["foo"]); } if (req.id == 1) { @@ -38,7 +40,7 @@ var c = tcp.createConnection(port); c.setEncoding("utf8"); c.addListener("connect", function () { - c.send( "GET /hello HTTP/1.1\r\n\r\n" ); + c.send( "GET /hello?hello=world&foo=b==ar HTTP/1.1\r\n\r\n" ); requests_sent += 1; }); -- 2.7.4