| // Adapted from connect-restreamer, with bugfix to move "next" after the process.nextTick() |
| module.exports = function (options) { |
| options = options || {}; |
| options.property = options.property || 'body'; |
| options.stringify = options.stringify || JSON.stringify; |
| |
| return function (req, res, next) { |
| req.removeAllListeners('data'); |
| req.removeAllListeners('end'); |
| if (req.headers['content-length'] !== undefined) { |
| req.headers['content-length'] = Buffer.byteLength(options.stringify(req[options.property]), 'utf8'); |
| } |
| process.nextTick(function () { |
| if (req[options.property]) { |
| if ('function' === typeof options.modify) |
| req[options.property] = options.modify(req[options.property]); |
| req.emit('data', options.stringify(req[options.property])); |
| } |
| req.emit('end'); |
| }); |
| next(); |
| } |
| }; |