You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
1.8 KiB
101 lines
1.8 KiB
/*! |
|
* body-parser |
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson |
|
* MIT Licensed |
|
*/ |
|
|
|
'use strict' |
|
|
|
/** |
|
* Module dependencies. |
|
*/ |
|
|
|
var bytes = require('bytes') |
|
var debug = require('debug')('body-parser:raw') |
|
var read = require('../read') |
|
var typeis = require('type-is') |
|
|
|
/** |
|
* Module exports. |
|
*/ |
|
|
|
module.exports = raw |
|
|
|
/** |
|
* Create a middleware to parse raw bodies. |
|
* |
|
* @param {object} [options] |
|
* @return {function} |
|
* @api public |
|
*/ |
|
|
|
function raw (options) { |
|
var opts = options || {} |
|
|
|
var inflate = opts.inflate !== false |
|
var limit = typeof opts.limit !== 'number' |
|
? bytes.parse(opts.limit || '100kb') |
|
: opts.limit |
|
var type = opts.type || 'application/octet-stream' |
|
var verify = opts.verify || false |
|
|
|
if (verify !== false && typeof verify !== 'function') { |
|
throw new TypeError('option verify must be function') |
|
} |
|
|
|
// create the appropriate type checking function |
|
var shouldParse = typeof type !== 'function' |
|
? typeChecker(type) |
|
: type |
|
|
|
function parse (buf) { |
|
return buf |
|
} |
|
|
|
return function rawParser (req, res, next) { |
|
if (req._body) { |
|
debug('body already parsed') |
|
next() |
|
return |
|
} |
|
|
|
req.body = req.body || {} |
|
|
|
// skip requests without bodies |
|
if (!typeis.hasBody(req)) { |
|
debug('skip empty body') |
|
next() |
|
return |
|
} |
|
|
|
debug('content-type %j', req.headers['content-type']) |
|
|
|
// determine if request should be parsed |
|
if (!shouldParse(req)) { |
|
debug('skip parsing') |
|
next() |
|
return |
|
} |
|
|
|
// read |
|
read(req, res, next, parse, debug, { |
|
encoding: null, |
|
inflate: inflate, |
|
limit: limit, |
|
verify: verify |
|
}) |
|
} |
|
} |
|
|
|
/** |
|
* Get the simple type checker. |
|
* |
|
* @param {string} type |
|
* @return {function} |
|
*/ |
|
|
|
function typeChecker (type) { |
|
return function checkType (req) { |
|
return Boolean(typeis(req, type)) |
|
} |
|
}
|
|
|