Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 482
user2986808 Avatar asked Dec 06 '13 17:12

user2986808


People also ask

How do I enable caching in NodeJS?

Implement caching with following approach: On API request, check if the cache has key already set using has(key) function. If the cache has the key, retrieve the cached value by get(key) function and use it instead of performing operation again. (This saves time)

Does node have a cache?

Similar to the previous example using node-cache , the data to be cached will be retrieved from an API.

How do I disable HTTP server cache?

To disable caching, use -c-1 (and possibly -p 8080 to force the server to clear the cache for that port; can be removed on subsequent runs).


1 Answers

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.

like image 78
vmx Avatar answered Sep 16 '22 16:09

vmx