奇怪的Express Jade查看缓存行为

时间:2013-10-30 02:12:34

标签: javascript node.js caching express pug

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

似乎正在缓存其他视图(或者所有视图中)中包含的视图生成的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时,视图会正确呈现。如果我使用相同的布局和标题访问其他网址 / someotherpage ,将 pageVars.headerOverBackground 设置为false,我仍然会看到 header.jade 部分呈现,好像它在上一页上一样(#header上有“overbackground”类),好像 pageVars.headerOverBackground 仍然是真的。

但这是假的,我已经得到了console.log()来证明它。

我做错了吗?我只是非常困惑吗?我在开发和生产模式下运行Node,甚至用

填充我的Express
app.disable('view cache');

无济于事......

编辑

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

1 个答案:

答案 0 :(得分:2)

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

其中一条路线错误地

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});

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