all files / express-stormpath/lib/helpers/ body-parser.js

95.65% Statements 22/23
90.91% Branches 10/11
100% Functions 8/8
95.65% Lines 22/23
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        35×     364×   364× 364×   364×   84×       84× 84× 84×                   246× 40× 40×                 61×               303×    
'use strict';
 
var qs = require('qs');
var bytes = require('bytes');
var anyBody = require('body/any');
var formBody = require('body/form');
 
var defaultSizeLimit = '200kb';
 
function queryStringParser(text, callback) {
  callback(null, qs.parse(text));
}
 
function handleBodyFn(options, bodyFn) {
  options = options || {};
 
  options.querystring = { parse: queryStringParser };
  options.limit = bytes.parse(options.limit || defaultSizeLimit);
 
  return function (req, res, next) {
    // If the body is already parsed, by e.g. body-parser, then skip parsing.
    Iif (req.body !== undefined) {
      return next();
    }
 
    bodyFn(req, res, options, function (err, parsedBody) {
      req.body = parsedBody || req.body || {};
      next();
    });
  };
}
 
module.exports = {
  /**
   * Middleware that forces a default
   * req.body object (null object).
   */
  forceDefaultBody: function () {
    return function forceDefaultBodyMiddleware(req, res, next) {
      req.body = req.body || {};
      next();
    };
  },
 
  /**
   * Middleware for parsing a form (query string)
   * encoded request body.
   */
  form: function formParserMiddleware(options) {
    return handleBodyFn(options, formBody);
  },
 
  /**
   * Middleware for parsing either a form
   * (query string) or JSON encoded request body.
   */
  formOrJson: function formOrJsonParserMiddleware(options) {
    return handleBodyFn(options, anyBody);
  }
};