description and source-codefunction requestbody(opts) {
opts = opts || {};
opts.onError = 'onError' in opts ? opts.onError : false;
opts.patchNode = 'patchNode' in opts ? opts.patchNode : false;
opts.patchKoa = 'patchKoa' in opts ? opts.patchKoa : true;
opts.multipart = 'multipart' in opts ? opts.multipart : false;
opts.urlencoded = 'urlencoded' in opts ? opts.urlencoded : true;
opts.json = 'json' in opts ? opts.json : true;
opts.text = 'text' in opts ? opts.text : true;
opts.encoding = 'encoding' in opts ? opts.encoding : 'utf-8';
opts.jsonLimit = 'jsonLimit' in opts ? opts.jsonLimit : '1mb';
opts.formLimit = 'formLimit' in opts ? opts.formLimit : '56kb';
opts.formidable = 'formidable' in opts ? opts.formidable : {};
opts.textLimit = 'textLimit' in opts ? opts.textLimit : '56kb';
opts.strict = 'strict' in opts ? opts.strict : true;
return function *(next){
var body = {};
// so don't parse the body in strict mode
if (!opts.strict || ["GET", "HEAD", "DELETE"].indexOf(this.method.toUpperCase()) === -1) {
try {
if (opts.json && this.is('json')) {
body = yield buddy.json(this, {encoding: opts.encoding, limit: opts.jsonLimit});
}
else if (opts.urlencoded && this.is('urlencoded')) {
body = yield buddy.form(this, {encoding: opts.encoding, limit: opts.formLimit});
}
else if (opts.text && this.is('text')) {
body = yield buddy.text(this, {encoding: opts.encoding, limit: opts.textLimit});
}
else if (opts.multipart && this.is('multipart')) {
body = yield formy(this, opts.formidable);
}
} catch(parsingError) {
if (typeof(opts.onError) === 'function') {
opts.onError(parsingError, this);
} else {
throw parsingError;
}
}
}
if (opts.patchNode) {
this.req.body = body;
}
if (opts.patchKoa) {
this.request.body = body;
}
yield next;
};
}