Почему мы не можем сделать несколько response.send в Express.js?

3 года назад я мог сделать несколько res.send в express.js.
даже напишите 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 обновлены. почему бы не сделать это сейчас? любая другая идея?


Нашел решение, но "res.write" не находится в ссылке api http://expressjs.com/4x/api.html...

: S

Ответ 1

Может понадобиться: response.write

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

res.send неявно вызывает res.write за которым следует res.end. Если вы res.send несколько раз, он будет работать в первый раз. Однако, поскольку первый вызов res.send завершает ответ, вы не можете ничего добавить к ответу.

Ответ 2

response.send отправляет весь HTTP-ответ клиенту, включая заголовки и контент, поэтому вы не можете его вызывать несколько раз. Фактически, это даже заканчивает ответ, поэтому нет необходимости вызывать response.end явно при использовании response.send.

Мне кажется, что вы пытаетесь использовать send как буфер: записываете его с намерением сбросить позже. Однако это не так, как работает метод. вам нужно создать ответ в коде, а затем сделать один вызов для send.

К сожалению, я не могу говорить, почему и когда это изменение было сделано, но я знаю, что это было так, по крайней мере, с Express 3.