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已更新。为什么现在不能这样做?还有其他想法吗?
找到解决方案,但“res.write”不在api引用http://expressjs.com/4x/api.html ...
中:S
答案 0 :(得分:45)
也许您需要:response.write
response.write("foo");
response.write("bar");
//...
response.end()
res.send
隐式调用res.write
后跟res.end
。如果您多次致电res.send
,它将首次启用。但是,由于第一个res.send
调用结束了响应,因此您无法在响应中添加任何内容。
答案 1 :(得分:15)
response.send
向客户端发送完整的HTTP响应,包括标头和内容,这就是您无法多次调用它的原因。实际上,它甚至会结束响应,因此在使用response.end
时无需明确调用response.send
。
在我看来,您正试图像缓冲区一样使用send
:写入它以便稍后刷新。然而,这不是该方法的工作方式;您需要在代码中建立响应,然后进行一次send
调用。
不幸的是,我不能说出为什么或何时做出这种改变,但我知道至少从Express 3开始就是这样。