簡體   English   中英

奇怪的Express Jade視圖緩存行為

[英]Weird Express Jade view caching behavior

剛將我的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時,視圖將正確呈現。 如果我訪問具有相同布局和標題的其他URL / someotherpage ,並將pageVars.headerOverBackground設置為false,則仍會看到header.jade部分呈現為與上一頁相同(帶有“ overbackground”類)在#header上),好像pageVars.headerOverBackground仍然為true。

但這是錯誤的,我已經用console.log()證明了這一點。

難道我做錯了什么? 我只是感到非常困惑嗎? 我已經在開發和生產模式下運行Node,甚至還對Express進行了擴展

app.disable('view cache');

無濟於事...

編輯:

無論我重新加載頁面多少次,它都會加載緩存的視圖。 如果我重新啟動Node並重新加載,則會顯示正確的視圖。

好的,我想我可能已經解決了。

其中一條路線錯誤地經過

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

另一個頁面視圖中的翡翠將使用pageVars的全局版本而不是所傳遞的局部變量,並且仍然認為pageVars.headerOverBackground為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM