No cache in Node.js server
I have read that to avoid caching in Node.js, it is necessary to use:
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
But I don't know how to use it because I get errors when I put that line in my code.
My function (where I think I have to program the Cache-Control header) is:
function getFile(localPath, mimeType, res) {
fs.readFile(localPath, function(err, contents) {
if (!err) {
res.writeHead(200, {
"Content-Type": mimeType,
"Content-Length": contents.length,
"Accept-Ranges": "bytes",
});
// res.header('Cache-Control', 'no-cache');
res.end(contents);
} else {
res.writeHead(500);
res.end();
}
});
}
Does anyone know how to put no cache in my code?
Make use of a middleware to add no-cache
headers. Use this middleware where-ever you intend to turn caching off.
function nocache(req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next();
}
Use the middleware in your routes definition:
app.get('/getfile', nocache, sendContent);
function sendContent(req, res) {
var localPath = 'some-file';
var mimeType = '';
fs.readFile(localPath, 'utf8', function (err, contents) {
if (!err && contents) {
res.header('Content-Type', mimeType);
res.header('Content-Length', contents.length);
res.end(contents);
} else {
res.writeHead(500);
res.end();
}
});
}
Let me know if this works for you.
Set these headers on your response:
'Cache-Control': 'private, no-cache, no-store, must-revalidate'
'Expires': '-1'
'Pragma': 'no-cache'
If you use express you can add this middleware to have no cache on all requests:
// var app = express()
app.use(function (req, res, next) {
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
res.header('Pragma', 'no-cache');
next()
});
You've already written your headers. I don't think you can add more after you've done that, so just put your headers in your first object.
res.writeHead(200, {
'Content-Type': mimeType,
'Content-Length': contents.length,
'Accept-Ranges': 'bytes',
'Cache-Control': 'no-cache'
});
You can use nocache Middleware to turn off caching.
npm install --save nocache
Apply the middleware to your app
const nocache = require('nocache');
...
app.use(nocache());
This disables browser caching.