[英]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.