2017-09-08 2 views
0

Je dois récupérer le rawBody (tampon) pour une requête POST, mais je n'ai besoin de le faire que sur une seule route dans mon application.Express: rawBody/buffer sur une seule route

Actuellement, je suis en utilisant ce qui suit dans ma principale app.js:

app.use(bodyParser.json({ verify: function(req, res, buf) { req.rawBody = buf; }})); 

Cela fonctionne, mais il envoie le tampon pour chaque itinéraire. Ceci est indésirable car il utilise deux fois la RAM pour chaque demande dans mon application.

Comment puis-je obtenir le rawBody sur l'itinéraire unique dont j'ai besoin?

Répondre

1

En règle générale, vous devriez créer cette route unique et en ligne le middleware:

app.post('/route', bodyParser.json(...), function(req, res) { 
    ... 
}); 

Suivi par la configuration "normale":

app.use(bodyParser.json()); 

app.post('/another-route', function(req, res) { 
    ... 
}); 

Au lieu d'abuser de bodyParser.json(), vous pouvez également utiliser bodyParser.raw().

0

Si son trivial de se référer à l'itinéraire spécifique, cela work.This est une représentation très simpliste de l'idée:

var routeIWantToBuffer = "someroute"; 
app.use(bodyParser.json(
    { 
    verify: function(req, res, buf) { 
     if(req.route === routeIWantToBuffer) req.rawBody = buf; 
    } 
    } 
)); 

Habituellement, les fonctions itinéraire/utilisation ont également un argument next qui est utilisé pour continuer la chaine. Je ne dis pas que c'est faux, mais je ne sais pas à quoi ressemble le reste de votre code. Mais je pense qu'elle doit ressembler à ceci:

var routeIWantToBuffer = "someroute"; 
app.use(bodyParser.json(
    { 
    verify: function(req, res, buf, next) { 
     if(req.route === routeIWantToBuffer) req.rawBody = buf; 
     next(); 
    } 
    } 
));