javascript - 奇怪的 Express Jade View 缓存行为

标签 javascript node.js caching express pug

刚刚将我的 Node.js 和 Express 版本分别更新到 0.10.21 和 3.4.4,现在我在开发(和生产)中看到一些奇怪的 View 缓存。

似乎正在缓存从其他 View (或者可能是所有 View ?)中包含的 View 生成的 html。

例如:

layout.jade

doctype 5
html
    head
        title= title
        meta(name="viewport", content="width=device-width, initial-scale=1.0")
        link(rel='stylesheet', href='/stylesheets/style.css')
    body
        #container
            include header
            block content
            include footer

header.jade

- var headerClass = ""

if pageVars.headerOverBackground
    - headerClass = "overbackground"   

#header(class=headerClass)
    [snip]

somepage.jade

extends layout

block content

    [snip]

我第一次调用 /somepage 时,将 pageVars.headerOverBackground 设置为 true, View 正确呈现。如果我访问不同的 URL,/someotherpage,具有相同的布局和标题,将 pageVars.headerOverBackground 设置为 false,我仍然看到 header.jade 部分呈现为就好像它在前一页上一样(#header 上有“overbackground”类),就好像 pageVars.headerOverBackground 仍然为真。

但这是错误的,我有 console.log() 来证明这一点。

我做错了什么吗?我只是非常困惑吗?我在开发和生产模式下运行 Node,甚至在我的 Express 中添加了

app.disable('view cache');

没用...

编辑:

无论我重新加载页面多少次,它都会加载缓存的 View 。 如果我重新启动 Node 并重新加载,则会出现正确的 View 。

最佳答案

好吧,我想我可能已经解决了这个问题。

其中一条路线错了

pageVars = {};

代替

var pageVars = {}; 

导致声明一个全局变量。哎呀!在旧版本的 Node/Express/Jade 和当前版本之间的某个地方,Jade 开始更喜欢全局变量,即使在显式传递同名本地变量时也是如此。

所以如果一条路线错误地做了

pageVars = {};  //global, oops
pageVars.headerOverBackground = true;
res.render("onepage", {pageVars:pageVars}); 

然后调用另一个路由

var pageVars = {};  //local
// pageVars.headerOverBackground is undefined
res.render("anotherpage", {pageVars:pageVars});

另一个页面 View 中的 Jade 将使用全局版本的 pageVars 而不是传递的局部变量,并且仍然认为 pageVars.headerOverBackground 为 true。

关于javascript - 奇怪的 Express Jade View 缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672617/

相关文章:

javascript - 如何在模块内使用shiny.setInputValue?

javascript - 言语合成事件的问题

javascript - 在 asp.net MVC 中实现搜索与tinyMCE编辑器发生冲突

javascript - 在 Node 6 中使用 async/await 和 Babel

javascript - 如何在 typescript 中安全地声明嵌套对象类型

node.js - 读取 CSV 文件的最后一行并提取一个值

mysql - 重现 MySQL 错误 : The server closed the connection (node. js)

apache - 为什么 Lighthouse 使我的缓存文件失败?

c - 是否可以将内存位置与缓存 Hook

c - 循环的执行时间