Как закончить ответ 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, которая добавляет элемент в представление (для всех)
Я сделал это так, чтобы быть неблокирующим (так я думал)
Ответы
Ответ 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);