2014-08-28 17 views
14

3 anni fa potrei fare più res.send in express.js.
anche scrivere un setTimeout per mostrare un output live.non può fare più res.send in express.js

response.send('<script class="jsbin" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>'); 
response.send('<html><body><input id="text_box" /><button>submit</button></body></html>'); 
var initJs = function() { 
    $('.button').click(function() { 
    $.post('/input', { input: $('#text_box').val() }, function() { alert('has send');}); 
    }); 
} 
response.send('<script>' + initJs + '</script>'); 

Ora si getterà:

Error: Can't set headers after they are sent 

So nodejs ed esprimo hanno aggiornato. perché non può farlo ora? qualche altra idea?


trovato la soluzione, ma "res.write" non è in riferimento api http://expressjs.com/4x/api.html ...

: S

risposta

29

Forse avete bisogno: response.write

response.write("foo"); 
response.write("bar"); 
//... 
response.end() 

res.send chiama implicitamente res.write seguito da res.end. Se chiami più volte res.send, funzionerà la prima volta. Tuttavia, poiché la prima chiamata res.send termina la risposta, non è possibile aggiungere nulla alla risposta.

+0

Sì, sembra che sia probabilmente quello a cui stava pensando. Mi sono completamente dimenticato di 'response.write' di Node; il mio cervello era in terra Express:/ –

+2

Cool, questo è quello che voglio. Ma, perché non è in riferimento api http://expressjs.com/4x/api.html#res.send ??? – emj365

+0

Forse perché dovremmo usare 'res.render' o' res.send', io uso 'res.write' quando ero un novizio. @ emj365 perché non provare 'res.render'? – osrpt

11

response.send invia un intero risposta HTTP al client, tra cui intestazioni e il contenuto, ecco perché non puoi chiamarlo più volte. In effetti, termina anche la risposta, quindi non è necessario chiamare lo response.end esplicitamente quando si utilizza response.send.

Mi sembra che si stia tentando di utilizzare send come un buffer: scrivendo su di esso con l'intenzione di svuotare più tardi. Questo non è come funziona il metodo, comunque; è necessario creare la risposta nel codice e quindi effettuare una singola chiamata send.

Purtroppo, non posso parlare perché o quando è stato fatto questo cambiamento, ma so che è stato in questo modo almeno da quando espresso 3.

Problemi correlati