raw.js (1884B)
1 /*! 2 * body-parser 3 * Copyright(c) 2014-2015 Douglas Christopher Wilson 4 * MIT Licensed 5 */ 6 7 'use strict' 8 9 /** 10 * Module dependencies. 11 */ 12 13 var bytes = require('bytes') 14 var debug = require('debug')('body-parser:raw') 15 var read = require('../read') 16 var typeis = require('type-is') 17 18 /** 19 * Module exports. 20 */ 21 22 module.exports = raw 23 24 /** 25 * Create a middleware to parse raw bodies. 26 * 27 * @param {object} [options] 28 * @return {function} 29 * @api public 30 */ 31 32 function raw (options) { 33 var opts = options || {} 34 35 var inflate = opts.inflate !== false 36 var limit = typeof opts.limit !== 'number' 37 ? bytes.parse(opts.limit || '100kb') 38 : opts.limit 39 var type = opts.type || 'application/octet-stream' 40 var verify = opts.verify || false 41 42 if (verify !== false && typeof verify !== 'function') { 43 throw new TypeError('option verify must be function') 44 } 45 46 // create the appropriate type checking function 47 var shouldParse = typeof type !== 'function' 48 ? typeChecker(type) 49 : type 50 51 function parse (buf) { 52 return buf 53 } 54 55 return function rawParser (req, res, next) { 56 if (req._body) { 57 debug('body already parsed') 58 next() 59 return 60 } 61 62 req.body = req.body || {} 63 64 // skip requests without bodies 65 if (!typeis.hasBody(req)) { 66 debug('skip empty body') 67 next() 68 return 69 } 70 71 debug('content-type %j', req.headers['content-type']) 72 73 // determine if request should be parsed 74 if (!shouldParse(req)) { 75 debug('skip parsing') 76 next() 77 return 78 } 79 80 // read 81 read(req, res, next, parse, debug, { 82 encoding: null, 83 inflate: inflate, 84 limit: limit, 85 verify: verify 86 }) 87 } 88 } 89 90 /** 91 * Get the simple type checker. 92 * 93 * @param {string} type 94 * @return {function} 95 */ 96 97 function typeChecker (type) { 98 return function checkType (req) { 99 return Boolean(typeis(req, type)) 100 } 101 }