在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开始,我知道它是这样的。