gpt4 book ai didi

javascript - 奇怪的 Express Jade View 缓存行为

转载 作者:行者123 更新时间:2023-11-30 17:48:10 25 4
gpt4 key购买 nike

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

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

但这是错误的,我有 console.log() 来证明这一点。

我做错了什么吗?我只是非常困惑吗?我在开发和生产模式下运行 Node,甚至在我的 Express 中添加了

app.disable('view cache');

没用...

编辑:

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

最佳答案

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

其中一条路线错了

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

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

关于javascript - 奇怪的 Express Jade View 缓存行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19672617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com