刚刚将我的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,甚至用
填充我的Expressapp.disable('view cache');
无济于事......
编辑
无论我重新加载页面多少次,它都会加载缓存的视图。 如果我重新启动Node并重新加载,则会显示正确的视图。
答案 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。