diff --git a/lib/http/base.js b/lib/http/base.js index beb2b345..733f0d5f 100644 --- a/lib/http/base.js +++ b/lib/http/base.js @@ -10,6 +10,7 @@ var AsyncObject = require('../utils/async'); var utils = require('../utils/utils'); var assert = require('assert'); +var url = require('url'); /** * HTTPBase @@ -92,12 +93,12 @@ HTTPBase.prototype._initRouter = function _initRouter() { function done(err) { if (err) { - send(res, 400, { error: err.message + '' }); + send(res, err.statusCode || 400, { error: err.message + '' }); try { req.destroy(); req.socket.destroy(); } catch (e) { - self.emit('error', e); + ; } self.emit('error', err); } @@ -512,35 +513,40 @@ function parseBody(req, callback) { }); } -function parsePairs(str, del, eq) { - var out, s, i, parts; +function parsePairs(str) { + var parts = str.split('&'); + var data = {}; + var i, index, pair, key, value; - if (!str) - return {}; + for (i = 0; i < parts.length; i++) { + pair = parts[i]; + index = pair.indexOf('='); - if (!del) - del = '&'; - - if (!eq) - eq = '='; - - out = {}; - s = str.split(del); - - for (i = 0; i < s.length; i++) { - parts = s[i].split(eq); - if (parts[0]) { - parts[0] = unescape(parts[0]); - parts[1] = parts[1] ? unescape(parts[1]) : ''; - out[parts[0]] = parts[1]; + if (index === -1) { + key = pair; + value = ''; + } else { + key = pair.substring(0, index); + value = pair.substring(index + 1); } + + key = unescape(key); + + if (key.length === 0) + continue; + + value = unescape(value); + + if (value.length === 0) + continue; + + data[key] = value; } - return out; + return data; } function parsePath(req) { - var url = require('url'); var uri = url.parse(req.url); var pathname = uri.pathname || '/';