0

我正在创建一个动态 node.js 网站。我不希望浏览器存储页面,即每当用户单击重新加载时,我希望页面从头开始重新加载。目前,即使我发送“Cache-Control”:“no store”,我的页面似乎仍然被缓存。这是我的服务器:

// requires node's http module
var http=require('http');
var url=require('url');
var fs=require('fs');
// creates a new httpServer instance
http.createServer(function (req, res) {
// this is the callback, or request handler for the httpServer
log('in server callback')
res.ins=res.write;

var parse=url.parse(req.url,true);
var path0=parse.pathname;
var mime=core.getMime(path0)
console.log(path0)
// respond to the browser, write some headers so the 
// browser knows what type of content we are sending

var servePage=function(){
    var path='./page'+path0+'.js'
    console.log(path)
    fs.exists(path,function(e){
        if(e){
            log('serving page')
            var exp=require(path); 
            if(exp && exp.html){
                var html=exp.html
            }
            else{
                var html='bad file'
            }
        }
        else{
            console.log('no page to serve')
            var exp=require('./page/pageHome.js')
            var html=exp.html
        }
        res.writeHead(200, {'Content-Type': mime, 'Cache-Control': 'no store'});
        res.ins(html);
        res.end();
    })
}
servePage()
}).listen(8080); // the server will listen on port 8080

我还尝试使用诸如“ http://mydomain.com/page?q=42 ”之类的随机查询字符串创建自链接,但这仍然没有绕过缓存。我究竟做错了什么?谢谢!

4

1 回答 1

1

你这样做通常是错误的。

请阅读require。它用于为 node.js 加载模块并执行它。不适用于通过 http 实际为请求提供文件。
require将始终缓存执行结果并保留模块的引用,您必须手动清除它 - 但如上所述,这不是您的情况。

请阅读这篇精彩的文章:Nodejs 发送文件作为响应,描述了如何通过 node.js 发送文件。

您也可以为其设置 no-cache 标头,但这是一种“不好的方式”。您可能最好根本不要触摸任何标题,并在前端进行额外查询,但并非总是如此。

res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
于 2013-07-09T17:32:12.513 回答