Подтвердить что ты не робот

Как закончить ответ express.js/node POST?

Я пытаюсь просто остановить запрос на отправку после того, как я сохранил документ в БД, то есть:

app.post('/blah'), function(req,res){ 
//my code does a bunch of stuff

res.what do i put here to tell the client browser to just... stop the POST
}

В настоящий момент im просто использует res.redirect('back'), который работает, но обновление страницы абсолютно произвольно, и я бы предпочел, чтобы это не произошло. Я отправился в res.end();, но отправил клиента на пустую страницу...

Спасибо заранее.

изменить

Я не думаю, что я сделал себе достаточно ясно, что мне жаль.

Возможно, его плохая практика, но это то, что происходит:

  • POST инициирует функцию сохранения базы данных

  • Браузер сидит в ожидании ответа

  • Когда он хорош и готов, obj сохраняется в БД, тогда обратный вызов запускает функцию NowJS, которая добавляет элемент в представление (для всех)

Я сделал это так, чтобы быть неблокирующим (так я думал)

4b9b3361

Ответ 1

Вы можете использовать res.end и передать строку, которую вы хотите отправить клиенту:

res.end('It worked!');

В качестве альтернативы вы можете визуализировать представление, а затем завершить ответ:

res.render('blah.jade');
res.end();

Все, что сказал, перенаправление клиента на самом деле является лучшей практикой. Это делает так, что, когда они нажимают кнопку "Назад" в своем браузере, они могут беспрепятственно перемещаться без каких-либо всплывающих окон "POST required" или тому подобного. Это шаблон POST/redirect, и вы можете узнать больше об этом на http://en.wikipedia.org/wiki/Post/Redirect/Get.

Ответ 2

В то время как вы можете использовать базовый метод end, заимствованный из модуля Node http, Express.js имеет свой собственный метод send, который вызывает end, когда это необходимо:

/**
 * Send a response.
 *
 * Examples:
 *
 *     res.send(new Buffer('wahoo'));
 *     res.send({ some: 'json' });
 *     res.send('<p>some html</p>');
 *     res.send(404, 'Sorry, cant find that');
 *     res.send(404);
 *
 * @param {Mixed} body or status
 * @param {Mixed} body
 * @return {ServerResponse}
 * @api public
 */
res.send = function(body){
  .
  .
  .

  // respond
  this.end(head ? null : body);
  return this;
};

Ответ 3

Для справок в будущем вы также можете:

res.redirect('back');

В основном это просто перенаправляет браузер обратно на экран, с которого пришел запрос, другими словами, "обновляя" его. Это взломанно, и я хочу, чтобы был лучший способ, но он работает.

Ответ 4

Если вы можете изменить свой код на стороне клиента, чтобы отправить запрос на отправку через AJAX, вы можете просто использовать res.end().

Проблема заключается в том, что когда браузер делает запрос POST (а не через AJAX), он больше не заботится о текущей странице. Он ожидает новую страницу, поэтому он загрузит новую страницу. Это чисто с браузером, и я не верю, что в настоящее время у вас есть способ обойти его.

В целом вы должны просто использовать запрос POST AJAX, если сможете.

Ответ 5

Клиентский браузер ждет ответа. Итак, почему бы не дать ему что-то вроде res.send('<p>Thank you</p>'); или красивого визуализированного представления?

Причина res.end() отправляет клиента на пустую страницу, так что вы не предоставляете клиенту что-либо для отображения.

Ответ 6

Лучший способ закончить экспресс-маршрутизацию без маршрутизации на новую страницу или то, что когда-либо было беспорядочным, хочет, чтобы вы не оставались на текущей странице, хотя у вас есть своя собственная причина использовать window.stop, например форму, вы используйте javascript для обработки представления, тайм-аут должен быть достаточным для обеспечения отправки данных в виде метода POST.

document.myform.mysubmit.click()
    setTimeout(function(){ 
        window.stop() 
    }, 3000);