48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
var rawBody = require("raw-body")
|
||
|
var cache = require("continuable-cache")
|
||
|
|
||
|
var parseArguments = require("./parse-arguments.js")
|
||
|
|
||
|
var ONE_MB = 1024 * 1024
|
||
|
var THUNK_KEY = '__npm_body_thunk_cache__';
|
||
|
|
||
|
module.exports = body
|
||
|
|
||
|
function parseBodyThunk(req, res, opts) {
|
||
|
return function thunk(callback) {
|
||
|
var limit = "limit" in opts ? opts.limit : ONE_MB
|
||
|
var contentLength = req.headers ?
|
||
|
Number(req.headers["content-length"]) : null;
|
||
|
|
||
|
rawBody(req, {
|
||
|
limit: limit,
|
||
|
length: contentLength,
|
||
|
encoding: "encoding" in opts ? opts.encoding : true
|
||
|
}, callback);
|
||
|
};
|
||
|
}
|
||
|
|
||
|
function body(req, res, opts, callback) {
|
||
|
var args = parseArguments(req, res, opts, callback)
|
||
|
req = args.req
|
||
|
res = args.res
|
||
|
opts = args.opts
|
||
|
callback = args.callback
|
||
|
|
||
|
var thunk;
|
||
|
|
||
|
if (opts.cache) {
|
||
|
var thunk = req[THUNK_KEY] ||
|
||
|
cache(parseBodyThunk(req, res, opts));
|
||
|
req[THUNK_KEY] = thunk;
|
||
|
} else {
|
||
|
thunk = parseBodyThunk(req, res, opts);
|
||
|
}
|
||
|
|
||
|
if (!callback) {
|
||
|
return thunk;
|
||
|
}
|
||
|
|
||
|
thunk(callback);
|
||
|
}
|