【问题标题】:Reload a page after res.redirect('back') in route在路由中的 res.redirect('back') 之后重新加载页面
【发布时间】:2012-05-08 07:07:17
【问题描述】:

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

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

【问题讨论】:

    标签: node.js routes express pug


    【解决方案1】:

    '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' 之类的 url,则不必费心费力地添加一些版本控制 - 只需将当前时间戳附加到 url 字符串即可。

    第一种方法更清洁,并且在 imo 中效果更好。我见过这样的情况:一个页面没有引荐来源网址,即使由于缓存我显然来自另一个页面。

    【讨论】:

      【解决方案2】:

      您应该能够执行 res.redirect('/album') 而不是 back 来强制完全重新加载但获得相同类型的反馈。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 2019-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多