Parse queryString into req.uri.params
authorRyan Dahl <ry@tinyclouds.org>
Mon, 5 Oct 2009 12:51:41 +0000 (14:51 +0200)
committerRyan Dahl <ry@tinyclouds.org>
Mon, 5 Oct 2009 12:52:26 +0000 (14:52 +0200)
doc/api.txt
lib/http.js
test/mjsunit/test-http-server.js

index 0b64c93..f766eca 100644 (file)
@@ -679,6 +679,7 @@ Then +request.uri+ will be
 { full: "/status?name=ryan",
   path: "/status",
   queryString: "name=ryan",
+  params: { "name": "ryan" },
   fragment: ""
 }
 ----------------------------------------
index 8282794..dc71698 100644 (file)
@@ -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;
index f2c521e..7495afa 100644 (file)
@@ -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;
 });