node.js - 在 route 的 res.redirect ('back' ) 之后重新加载页面

标签 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');
    });
});

最佳答案

'back' 是 req.get('Referrer') 的别名,因此如果 '/albums' 是您的引荐来源网址,您可能仍会遇到浏览器返回 304 的问题(http 未修改) http 状态或浏览器缓存页面(常见)。如果您遇到该问题,您可以执行以下操作:

发送一些缓存清除 header :

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

在我看来,第一种方法更干净,效果更好。我见过这样的情况:页面没有引荐来源网址,即使我由于缓存而明显来自另一个页面。

关于node.js - 在 route 的 res.redirect ('back' ) 之后重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10352241/

相关文章:

javascript - 使用 node.js 时,我不断从具有 POST 请求方法的表单获取 [object][Object] 作为我的请求

ruby-on-rails - 带参数的 Rails 自定义路由

javascript - 如何在express.js中编写查找和更新查询?

node.js - Redis "Promiseable"在 Node 中吗?

javascript - 如何维护 socket.io + node.js 中的当前事件套接字?

ruby-on-rails - 在Rails API服务中访问未定义的路由时呈现JSON格式的响应

Node.js/Express/Redis 只等待来自 channel 的一条消息

javascript - 消息: 'Cast to number failed for value "undefined"at path in nodejs mongoose express

node.js - 如何使用 Knex CLI

javascript - 更快地封锁 Express 中的所有路线