我正在创建一个动态的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”)创建自我链接,但这仍然没有绕过缓存。我究竟做错了什么?谢谢!
答案 0 :(得分:1)
你这样做通常是错误的。
请阅读require
。它用于加载node.js的模块并执行它。不是通过http实际为请求提供文件
require
将始终缓存执行结果并保留模块的引用,您必须手动清除它 - 但如上所述,这不是您的情况。
请阅读这篇精彩文章:Nodejs send file in response,介绍如何通过node.js发送文件。
您也可以为它设置no-cache标头,但这是一种做事的“坏方法”。您最好不要触摸任何标题,并在前端进行额外查询,但即使并非总是如此。
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');