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

时间:2012-04-27 14:11:38

标签: node.js routes express pug

我正在开发一个允许您上传图片和创建相册的应用程序。一切正常,接受在创建专辑后,新专辑在重新加载页面之前不会显示在客户端中,我无法弄清楚如何解决这个问题。

以下是创建相册的路线。在这种情况下,是否有可能在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');
    });
});

2 个答案:

答案 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')而不是返回以强制完全重新加载,但获得相同类型的反馈。