docs: function urlEncodedBodyParser(options) {
      var opts = options || {};
      assert.object(opts, 'opts');
  
      var override = opts.overrideParams;
  
      function parseUrlEncodedBody(req, res, next) {
          // save original body on req.rawBody and req._body
          req.rawBody = req._body = req.body;
  
          if (req.getContentType() !== MIME_TYPE || !req.body) {
              next();
              return;
          }
  
          try {
              var params = querystring.parse(req.body);
  
              if (opts.mapParams === true) {
                  var keys = Object.keys(params);
                  keys.forEach(function (k) {
                      var p = req.params[k];
  
                      if (p && !override) {
                          return;
                      }
                      req.params[k] = params[k];
                  });
              }
  
              req.body = params;
          } catch (e) {
              next(new errors.InvalidContentError(e.message));
              return;
          }
  
          req.log.trace('req.params now: %j', req.params);
          next();
      }
  
      var chain = [];
  
      if (!opts.bodyReader) {
          chain.push(bodyReader(opts));
      }
      chain.push(parseUrlEncodedBody);
      return (chain);
  }