Как завершить POST-ответ express.js / node? - PullRequest
36 голосов
/ 02 февраля 2012

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

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
}

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

Заранее спасибо.

edit:

Не думаю, что я достаточно ясно дал понять, в чем я сожалею.

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

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

  2. Браузер бездельничает в ожидании ответа

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

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

Ответы [ 7 ]

48 голосов
/ 02 февраля 2012

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

res.end('It worked!');

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

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

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

3 голосов
/ 15 марта 2017

Для дальнейшего использования вы также можете сделать:

res.redirect('back');

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

3 голосов
/ 08 февраля 2014

Хотя вы можете использовать базовый метод end, заимствованный из http-модуля Node, у 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;
};
2 голосов
/ 17 января 2013

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

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

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

1 голос
/ 09 февраля 2019

Использование -> res.status (204) .send ();внутри почтового запроса

if(err) {

   console.log(err);

} else {

   res.status(204).send();

}
0 голосов
/ 04 октября 2015

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

document.myform.mysubmit.click()
    setTimeout(function(){ 
        window.stop() 
    }, 3000);
0 голосов
/ 02 февраля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...