Code coverage report for lib/defaultRequestParser.js

Statements: 6.67% (2 / 30)      Branches: 0% (0 / 8)      Functions: 0% (0 / 9)      Lines: 6.9% (2 / 29)      Ignored: none     

All files » lib/ » defaultRequestParser.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 641     1                                                                                                                        
var _ = require("lodash"),
    logger = require("./logger");
 
module.exports = {
    getUrlParams: function(path, template) {
        var pathParts = path.split("/"),
            urlParams = {},
            tmpltParts = template.split("/");
 
        _.each(pathParts, function(p, idx) {
            if(tmpltParts[idx][0] === ":") { 
                urlParams[tmpltParts[idx].slice(1)] = p;
            }
        });
        return urlParams;
    },
    getBodyContent: function(req, cb) {
        var self = this;
        if( ["POST", "PUT"].indexOf(req.method.toUpperCase()) == -1 ) {
            cb({});
            return;
        }            
        var bodyStr = "";
        req.on('data', function(chunk) {
            bodyStr += chunk.toString();
        })
 
        req.on('end', function() {
            if(bodyStr.match(/^\S+=\S+&?/)) {
                cb(self.getQueryParams("?" + bodyStr));
            } else {
                cb(bodyStr);
            }
        });
    },
    getQueryParams: function (url) {
        var paramsStr = url.split("?")[1];
        if(!paramsStr) return {};
        var params = paramsStr.split("&"),
            paramsObj = {};
 
        _(params).each(function(param) {
            var parts = param.split("=");
            paramsObj[parts[0]] = parts[1];
        });
        return paramsObj;
    },
    parse: function(req, template, originalReq, cb) {
        var path = req.url.split("?")[0],
            self = this,
            queryParams = {};
        
        this.getBodyContent(originalReq, function(postBody) {
            req.params = {
                url: self.getUrlParams(path, template),
                query: self.getQueryParams(req.url),
                body: postBody 
            };
            cb(req);
        });
        
    }
}