gpt4 book ai didi

node.js - 表达 View 缓存行为有趣

转载 作者:IT老高 更新时间:2023-10-28 23:16:35 26 4
gpt4 key购买 nike

我在 express/Jade 中的 View 缓存中遇到了一些有趣的事情。 Controller 通过 Mongoose 从 MongoDB 获取一篇文章并将其交给 res.render 函数。然而,在运行几分钟后,Express 开始为对该路由的所有请求提供相同的编译模板。这甚至发生在各种模板中使用的共享 .jade 包含中。

数据库正在获取正确的文章,如果我将一些随机字符串传递给模板也没关系,我总是得到相同的输出。

这是 Controller 功能:

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 遇到过这种 toruble 吗?

最佳答案

编辑:请注意,express 设置了为生产启用的 View 缓存:见 express docs

view cache Enables view template compilation caching, enabled inproduction by default

尝试在您的应用配置部分添加这一行:

app.disable('view cache');

另外,尝试添加缓存控制 header

res.setHeader('Cache-Control', 'no-cache');
res.render('articles/show', {
...

来自 w3.org文档:

Cahce-Control

The Cache-Control general-header field is used to specify directivesthat MUST be obeyed by all caching mechanisms along therequest/response chain. The directives specify behavior intended toprevent caches from adversely interfering with the request orresponse. These directives typically override the default cachingalgorithms. Cache directives are unidirectional in that the presenceof a directive in a request does not imply that the same directive isto be given in the response.

如果您需要更高级的控制,请考虑其他字段,例如 max-age、this question也是一个很好的资源,你会看到不同的浏览器实现这个 rfc 可能略有不同。

关于node.js - 表达 View 缓存行为有趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16922802/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com