aboutsummaryrefslogtreecommitdiff
path: root/node_modules/body/index.js
blob: eda251177cbfdeb9671e51009bf2a33325bf43c0 (plain)
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
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);
}