我会发表评论,但我今天才加入,没有任何声望点。
如果我理解正确,您正在使用 express.static 提供页面(因此它只是一个纯 HTML 页面),但如果用户已登录,您使用 express 的路由器,对吗?
我也猜你把提到的代码设置在主页的路由中。
如果是这种情况,您的问题不是浏览器缓存,而是由于connect
中间件的性质而发生的。
中间件在链中执行,完成后调用下一个,这意味着,如果我假设正确,express.static 在您的路由器之前被调用,它只是为静态 HTML 页面提供服务。
所以你的路由永远不会被执行,因为 express.static 不会调用next()
(由于一个明显的原因,文件存在)。
希望我猜对了。
编辑:
看来我猜错了。您确实说过它在您的笔记本电脑上运行良好,因此它看起来肯定是客户端缓存问题。
我仍然不确定您如何使用 express.static() 显示不同的主页,或者您将上面提到的代码放在哪里,我将在没有看到您的代码的情况下试一试,但我可能需要它并且别人是为了帮助你。
这些响应头应该在第一个响应中设置(当您访问主页时),它与重定向无关。现在让我们把重定向部分放在一边。
我写了一个快速(快速)的例子:
var express = require('express'),
http = require('http')
app = express();
app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.use(express.logger('dev'));
/*
* Here's where I set the headers, make sure it's above `express.static()`.
*
* Note: You can safely ignore the rest of the code, (it's pretty much "stock").
*/
app.use(function noCachePlease(req, res, next) {
if (req.url === '/') {
res.header("Cache-Control", "no-cache, no-store, must-revalidate");
res.header("Pragma", "no-cache");
res.header("Expires", 0);
}
next();
});
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function() {
app.use(express.errorHandler());
});
http.createServer(app).listen(app.get('port'), function() {
console.log("Express server listening on port " + app.get('port'));
});
此代码指示我的浏览器不要缓存该页面。
我在没有noCachePlease
中间件的情况下得到的响应标头:
Accept-Ranges bytes
Cache-Control public, max-age=0
Connection keep-alive
Content-Length 5
Content-Type text/html; charset=UTF-8
Date Fri, 20 Jul 2012 19:25:38 GMT
Etag "5-1342811956000"
Last-Modified Fri, 20 Jul 2012 19:19:16 GMT
X-Powered-By Express
我通过noCachePlease
中间件获得的响应标头:
Accept-Ranges bytes
Cache-Control no-cache, no-store, must-revalidate
Connection keep-alive
Content-Length 5
Content-Type text/html; charset=UTF-8
Date Fri, 20 Jul 2012 19:26:08 GMT
Etag "5-1342811956000"
Expires 0
Last-Modified Fri, 20 Jul 2012 19:19:16 GMT
Pragma no-cache
X-Powered-By Express
如您所见,它可以工作,但您可以自己运行此代码。
如果要运行它,则需要在全局express
下安装或安装(带有标志)。node_modules
-g