Lorsque vous tapez app.use(express.bodyParser())
, presque chaque demande de passer par bodyParser
fonctions (dont l'un sera exécutée dépend Content-Type
- tête).
Par défaut, il y a 3 têtes de prise en charge (AFAIR). Vous pourriez voir les sources pour être sûr. Vous pouvez (re)définir des gestionnaires d' Content-Type
s avec quelque chose comme ceci:
var express = require('express');
var bodyParser = express.bodyParser;
// redefine handler for Content-Type: multipart/form-data
bodyParser.parse('multipart/form-data') = function(req, options, next) {
// parse request body your way; example of such action:
// https://github.com/senchalabs/connect/blob/master/lib/middleware/multipart.js
// for your needs it will probably be this:
next();
}
upd.Les choses ont changé dans l'Express 3, donc je suis le partage de mise à jour du code de travail du projet (qui devrait être app.use
ed avant d' express.bodyParser()
):
var connectUtils = require('express/node_modules/connect/lib/utils');
/**
* Parses body and puts it to `request.rawBody`.
* @param {Array|String} contentTypes Value(s) of Content-Type header for which
parser will be applied.
* @return {Function} Express Middleware
*/
module.exports = function(contentTypes) {
contentTypes = Array.isArray(contentTypes) ? contentTypes
: [contentTypes];
return function (req, res, next) {
if (req._body)
return next();
req.body = req.body || {};
if (!connectUtils.hasBody(req))
return next();
if (-1 === contentTypes.indexOf(req.header('content-type')))
return next();
req.setEncoding('utf8'); // Reconsider this line!
req._body = true; // Mark as parsed for other body parsers.
req.rawBody = '';
req.on('data', function (chunk) {
req.rawBody += chunk;
});
req.on('end', next);
};
};
Et certains pseudo-code, concernant la question d'origine:
function disableParserForContentType(req, res, next) {
if (req.contentType in options.contentTypes) {
req._body = true;
next();
}
}