2013-10-30 22 views
1

剛剛將我的Node.js和Express版本分別更新爲0.10.21和3.4.4,現在我在開發(和生產)中看到一些奇怪的視圖緩存。Weird Express Jade視圖緩存行爲

似乎從其他視圖(或可能是所有視圖?)中包含的視圖生成的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,該視圖被正確地呈現。如果我訪問不同的URL,/someotherpage,具有相同的佈局和標題,在pageVars.headerOverBackground集傳送到假的,我仍然可以看到呈現,彷彿它是前一頁上header.jade部分(與#header上的「overbackground」類),就好像pageVars.headerOverBackground仍然如此。

但它是錯誤的,我有console.log()的證明。

我做錯了什麼?我只是非常困惑?我一直在開發和生產模式下運行的節點,甚至穿插我的快遞與

app.disable('view cache'); 

無濟於事......

編輯:

不管有多少次我重新加載頁面,它加載緩存視圖。 如果我重新啓動節點並重新加載,則顯示正確的視圖。

+0

聽起來類似於正在發生的事情[這裏](http://stackoverflow.com/questions/16922802/express-view-cache-acting-funny)(雖然還沒有解決) – robertklep

+0

(順便說一句,我不能重現它使用'express @ 3.4.4','jade @ 0.35.0'和'node @ 0.10.21') – robertklep

+0

我不確定它是否是你的錯字,但是......你試過追加一個' '如果pageVars.headerOverBackground'也是?或者你可能想簡化它只是' - headerClass = pageVars.headerOverBackground? 'overbackground':'''。讓我知道它是否有助於某種方式。 –

回答

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

在anotherpage視圖玉將使用pageVars的全球版本而不是傳遞的局部變量,並仍然認爲pageVars.headerOverBackground爲true。

+0

好趕上....! – robertklep