在路由中的res.redirect('back')之后重新加载页面

我正在研究一个允许你上传图片并创build相册的应用程序。 一切工作正常接受,一个相册创build后,新的相册不显示在客户端,直到页面重新加载,我不知道如何解决这个问题。

以下是创build相册的路线。 在这种情况下,是否有可能使用res.redirect('back')以外的其他内容,以便在路由完成后重新加载页面?

当然,我可以从路由中复制/粘贴代码,以便首先加载页面,但是这将会非常干燥。 也许我可以从这条路线内呼叫另一条路线?

路线:

app.post('/album', function(req, res){ var newAlbum = new albumModel.Album(); newAlbum.imageName = req.body.albumPicsName; newAlbum.imageId = req.body.albumPicsId; newAlbum.title = req.body.albumTitle; newAlbum.save(function (err) { if (err) { console.log(err); // do something console.trace(); } res.redirect('back'); }); }); 

你应该可以做res.redirect('/ album')而不是强制重新加载,但得到相同types的反馈。

'back'是req.get('Referrer')的别名,所以如果'/ albums'是你的引用者,你可能仍然会遇到浏览器返回一个304(http not modified)http状态或浏览器caching页面(common) 。 如果遇到这个问题,你可以做几件事情:

发送一些caching清理标题:

 res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'); res.redirect('back'); 

或者修改url:

  var url = require('url'); var u = url.parse(req.get('Referrer'), true, false); u.query['v'] = +new Date(); // add versioning to bust cache delete u.search; res.redirect(url.format(u)); 

当然,如果你知道像'/ albums'这样的url,你不必去通过所有的方法来添加一些版本控制,只需要把当前的时间戳添加到urlstring。

第一种方法是更清洁,更好地工作。 我曾经遇到过一个页面没有引用链接的情况,即使我显然是由于caching而从另外一个页面来的。

Interesting Posts