Tentei usar raw-body mas não funcionou quando usado junto com body-parser.
Funcionou bem:
var bodyParser = require('body-parser');
var rawBodySaver = function (req, res, buf, encoding) {
if (buf && buf.length) {
req.rawBody = buf.toString(encoding || 'utf8');
}
}
app.use(bodyParser.json({ verify: rawBodySaver }));
app.use(bodyParser.urlencoded({ verify: rawBodySaver, extended: true }));
app.use(bodyParser.raw({ verify: rawBodySaver, type: function () { return true } }));
Se um dos middleware bodyParser for aplicado, o próximo não será executado. Se a solicitação não for json nem urlencoded, o analisador bruto irá processá-la.
Isso não funciona para corpos longos:
app.use(function(req, res, next) {
var data = '';
req.on('data', function(chunk) {
data += chunk;
});
req.on('end', function() {
req.rawBody = data;
});
next();
});