2015-11-16 13 views

risposta

17

è possibile definire un middleware come sotto (preso e modificato da questa answer)

function modifyResponseBody(req, res, next) { 
    var oldSend = res.send; 

    res.send = function(data){ 
     // arguments[0] (or `data`) contains the response body 
     arguments[0] = "modified : " + arguments[0]; 
     oldSend.apply(res, arguments); 
    } 
    next(); 
} 

app.use(modifyResponseBody); 
+0

ho provato quanto sopra e funziona. Tuttavia res.send viene invocato due volte per tutti i metodi HTTP (POST, PUT, DELETE) e viene richiamato una sola volta per GET. Qualche idea sul perché res.send viene invocato due volte? – KBJ

+1

res.send = oldSend aggiungendo la riga precedente prima di richiamare il metodo oldSend corregge il problema sopra citato. Grazie! – KBJ

+0

Grazie a @Jugz, una spiegazione su come risolvere il problema sarebbe grandiosa, grazie. – Aukhan

3

Sì, questo è possibile. Ci sono due modi per farlo, uno è quello di utilizzare una libreria che fornisce l'intercettazione, con la possibilità di eseguirlo basa su una condizione specifica: https://www.npmjs.com/package/express-interceptor

L'altra opzione è quella di creare solo il proprio middleware (per espresso) come segue:

function modify(req, res, next){ 
    res.body = "this is the modified/new response"; 

    next(); 
} 
express.use(modify);