如何结束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 } 

目前,即时通讯简单地使用res.redirect('back') ,但页面刷新完全是任意的,我宁愿它没有发生。 我去了res.end(); 但是发送客户端到一个空白页面…

提前致谢。

编辑:

我不认为我在自己的对不起有什么了不起,

也许它的坏习惯,但这是发生了什么事情:

  1. POST启动数据库保存function

  2. 浏览器坐在等待响应

  3. 当它准备好了,obj被保存到数据库,然后callback触发一个NowJS函数,该函数将该项添加到视图(对于每个人)

我这样做是非阻塞的(所以我认为)

您可以使用res.end并传入要发送到客户端的string:

 res.end('It worked!'); 

或者,您可以渲染一个视图 ,然后结束响应:

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

总而言之,redirect客户实际上是最佳实践。 这使得当他们在浏览器中点击后退button时,他们可以无缝地返回,而不需要任何“需要POST”popup窗口或类似的东西。 这是POST /redirect模式,你可以在http://en.wikipedia.org/wiki/Post/Redirect/Get上阅读更多。

虽然您可以使用从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; }; 

为了将来的参考,你也可以这样做:

 res.redirect('back'); 

基本上这只是将浏览器redirect到请求来自的屏幕,换句话说就是“刷新”它。 这是哈克,我希望有一个更好的办法,但它的作品。

如果你可以通过AJAX修改你的客户端代码来发布请求,你可以直接使用res.end()。

这里的问题是,当浏览器发出一个POST请求(不是通过AJAX),它不再关心当前页面。 它期待一个新的页面,所以它会加载一个新的页面。 这纯粹是浏览器,我不相信目前有办法解决这个问题。

总体而言,如果可以的话,您应该只使用AJAX POST请求。

客户端浏览器正在等待响应。 那么为什么不给它一个像res.send('<p>Thank you</p>'); 或一个不错的渲染视图?

res.end()将客户端发送到空白页面的原因是您没有给客户端显示任何内容。

结束快速路由而无需路由到新页面或者任何乱七八糟的expression要求您不要停留在当前页面上的最佳方式,尽pipe您有自己的理由是使用window.stop,例如窗体,您使用javascript来处理提交,超时应足以保证数据以POST方式发送。

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