我正在开发一个允许您上传图片和创建相册的应用程序。一切正常,接受在创建专辑后,新专辑在重新加载页面之前不会显示在客户端中,我无法弄清楚如何解决这个问题。
以下是创建相册的路线。在这种情况下,是否有可能在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');
});
});
答案 0 :(得分:4)
'back'是req.get('Referrer')
的别名,因此,如果'/ albums'是您的引荐来源,您可能会遇到浏览器返回304(未修改的http)http状态或浏览器缓存页面(常见)的问题。如果您遇到此问题,可以执行以下操作:
发送一些缓存清除标头:
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
res.redirect('back');
或修改网址:
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”之类的网址,则不必为了添加某些版本控制而进行任何操作 - 只需将当前时间戳附加到网址字符串。
第一种方式更干净,效果更好imo。我已经看到一个页面没有推荐人的情况,即使我因为缓存而明显来自另一个页面。
答案 1 :(得分:1)
您应该能够执行res.redirect('/ album')而不是返回以强制完全重新加载,但获得相同类型的反馈。