aboutsummaryrefslogtreecommitdiff
path: root/node_modules/body/any.js
blob: 3b7314bab91de06be3f872625bbb2f2d65a70ca6 (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
var TypedError = require("error/typed")

var parseArguments = require("./parse-arguments.js")
var jsonBody = require("./json.js")
var formBody = require("./form.js")

var jsonType = "application/json"
var formType = "application/x-www-form-urlencoded"
var INVALID_CONTENT_TYPE = TypedError({
    message: "Could not parse content type header: {contentType}",
    type: "invalid.content.type",
    statusCode: 415,
    contentType: null
})

module.exports = anyBody

function anyBody(req, res, opts, callback) {
    var args = parseArguments(req, res, opts, callback)
    req = args.req
    res = args.res
    opts = args.opts
    callback = args.callback

    if (!callback) {
        return anyBody.bind(null, req, res, opts)
    }

    var contentType = req.headers["content-type"] || ""

    if (contentType.indexOf(jsonType) !== -1) {
        jsonBody(req, res, opts, callback)
    } else if (contentType.indexOf(formType) !== -1) {
        formBody(req, res, opts, callback)
    } else {
        callback(INVALID_CONTENT_TYPE({contentType: contentType}))
    }
}