我在express/Jade 中的视图缓存中遇到了一些有趣的事情。控制器通过 Mongoose 从 MongoDB 获取文章并将其交给 res.render 函数。然而,运行几分钟后,Express 开始为该路由的所有请求提供相同的编译模板。这种情况甚至发生在各种模板中使用的共享 .jade 包含文件中。
数据库正在获取正确的文章,如果我将一些随机字符串传递给模板并不重要,我总是得到相同的输出。
这是控制器功能:
exports.show = function(req, res) {
var articleId;
articleId = req.params.id;
Article.findOne({
_id: articleId
}).populate('author').exec(function(err, article) {
if (err) {
console.log(err);
} else {
res.render('articles/show', {
article: article,
articleId: article.id
});
}
});
};
这就是路线:
app.get('/articles/:id', articles.show);
无论我在生产模式还是开发模式下运行,都会发生同样的事情。
有人在使用 Express/Jade 时遇到过这种麻烦吗?
编辑:
请注意,express 设置了为生产启用的视图缓存:
看快速文档 http://expressjs.com/api.html
view cache 启用视图模板编译缓存,启用于
默认生产
尝试在您的应用程序配置部分添加此行:
app.disable('view cache');
另外,尝试添加缓存控制标头
res.setHeader('Cache-Control', 'no-cache');
res.render('articles/show', {
...
From w3.org http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html docs:
缓存控制
Cache-Control 通用标头字段用于指定指令
所有缓存机制都必须遵守
请求/响应链。这些指令指定了旨在
防止缓存对请求产生不利干扰或
回复。这些指令通常会覆盖默认缓存
算法。缓存指令是单向的,因为存在
请求中的指令并不意味着相同的指令
在回复中给出。
如果您需要更高级的控制,请考虑其他字段,例如 max-age,这个问题 https://stackoverflow.com/questions/1046966/whats-the-difference-between-cache-control-max-age-0-and-no-cache也是一个很好的资源,你会发现不同的浏览器对这个 rfc 的实现可能略有不同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)