express+ejs 如何禁用缓存

主页index.ejs显示用户名和用户头像,点击的个人中心跳转至信息详情页;在信息详情页修改信息以及上传头像等操作,点击保存之后从信息详情页回到主页index.ejs,这些操作后,数据库数据已经更新,但是主页indexejs中的头像,并没有更新。如果清除浏览器缓存,再次重新登录的话就可以更新用户头像。
请问这是不是属于缓存的问题,查到的一些写法可是不管用,我先贴在下面

第一种:

var ejs = require('ejs'),
LRU = require('lru-cache');
ejs.cache = LRU(100);

第二种:

app.use(express.static(path.join(__dirname, 'public')));
app.get("/*",function (req, res, next) {
    res.setHeader('Last-Modified',(new Date()).toUTCString());
    next();
})

第三种:

app.set('view cache', false);

第四种:

app.disable('view cache');

即使把这些都写上也不管用,还是需要清除浏览器缓存才可以更新用户头像,请大神指点。

阅读 5.9k
2 个回答

最终还是要自问自答。
其实之前那个问题不是缓存的事,是我自己把自己给误导了。主要是我在渲染修改个人信息页面的时候没有findOne,也没有用session,所以我每次修改的数据是成功了,但是要显示的数据在指定页面却显示不出来。所以上面的所有都可以不要。

//加载info
router.get("/admin/info/edit",function (req, res, next) {
    User.findOne({_id : req.session.user._id},function (err, doc) {
        if(err) return next(err);
        req.session.user = doc;
        console.log(doc)
        res.render("admin/info/msg",{title:"user_info"})
    })
});

    //发送请求
    router.post("/admin/info/edit",function (req, res, next) {

    var send_data = {
        username : req.body.username,
        age : req.body.age,
        address : req.body.address,
        hobby : req.body.hobby,
        sex : req.body.sex,
        weight : req.body.weight,
        tall : req.body.tall,
        pic_path : req.body.avatar,
        date : moment().format()
    };
    // console.log(send_data);
    User.findOne({_id:req.session.user._id}).lean().exec(function (err, doc) {
        if(err) return res.json({error : err.toString()});
        User.update({_id:req.session.user._id },send_data,function (err, doc) {
        if(err) return res.json({error : err.toString()});
            res.send({status : "ok!"});
        });
    })
});


好几天没搭理,今天没事干就想看看,结果无意间就发现了这个问题。给各位初学者的一个建议,想不明白的事,我们可以放一放。也许在不经意的某个瞬间你就想起来了。

头像那里加个版本控制会不会更好呢 ?
这样没有改头像的可以被缓存
更改之后又能及时刷新

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题