在express.js中不能做多个res.send

3年前,我可以在express.js中做多个res.send。
甚至写一个setTimeout来显示一个实时输出。

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>'); 

现在它会抛出:

 Error: Can't set headers after they are sent 

我知道nodejs和express已经更新了。 为什么现在不能这样做? 任何其他的想法?


find解决scheme,但“res.write”是不是在API参考http://expressjs.com/4x/api.html …

:S

也许你需要: response.write

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

res.send隐式地调用res.write后跟res.end 。 如果你多次调用res.send ,它会第一次工作。 但是,由于第一个res.send调用会结束响应,因此不能向响应添加任何内容。

response.send将整个HTTP response.send发送到客户端,包括标头和内容,这就是为什么您无法多次调用它的原因。 事实上,它甚至可以结束响应,所以在使用response.send时不需要显式调用response.send

在我看来,你正试图使用​​像缓冲区send :写入它的意图以后刷新。 然而,这不是该方法的工作原理。 你需要在代码中build立你的回应,然后send一个单一的send电话。

不幸的是,我不能说为什么或者什么时候做出这个改变,但是至less从Express 3开始,我知道它是这样的。