从缓存Node JS提供内容

时间:2015-01-18 23:49:47

标签: javascript node.js caching

晚安 我正在尝试从缓存中提供内容,我正在学习使用在线课程,但我有一个问题,因为当我修改内容的文件,服务继续使用缓存内存而我使用conditionel评估是否缓存是更新还是不....

我在Linux中使用过这段代码并且它可以使用,但是当我使用windows时它不能用...

 var http = require('http');
 var path = require('path');
 var fs = require('fs');

 var mimeTypes = {
 '.js' : 'text/javascript',
 '.html': 'text/html',
 '.css' : 'text/css'
  };

  var cache = {};
  function cacheYEntrega(f, cb) {
  fs.stat(f, function (err, stats) {
  var ultimoCambio = Date.parse(stats.ctime),
  estaActualizado = (cache[f]) && ultimoCambio  > cache[f].timestamp;
  if (!cache[f] || estaActualizado) {
  fs.readFile(f, function (err, data) {
    console.log('cargando ' + f + ' desde archivo');
    if (!err) {
      cache[f] = {content: data,
                  timestamp: Date.now() //almacenar datos tiempo actual
                 };
    }
    cb(err, data);
  });
  return;
  }
  console.log('cargando ' + f + ' de cache');
  cb(null, cache[f].content);
  }); //final de fs.stat
   }

   http.createServer(function (request, response) {
   var buscar= path.basename(decodeURI(request.url)) || 'index.html',
   f = 'content/' + buscar;
   fs.exists(f, function (exists) { //path.exists para Node 0.6 e inferiores
   if (exists) {

   cacheYEntrega(f, function (err, data) {
    if (err) {response.writeHead(500); response.end(); return; }
    var headers = {'Content-type': mimeTypes[path.extname(f)]};
    response.writeHead(200, headers);
    response.end(data);

     });
     return;

     }
    response.writeHead(404); //no se ha encontrado archivo
    response.end('Pagina no encontrada');

     });

      }).listen(8080);

由于

1 个答案:

答案 0 :(得分:0)

在检查代码和变量之后,我发现我的统计信息的ctime有问题,我不知道为什么修改文件内容时ctimes不会改变,所以我只使用mtime而不是ctime和它开始以正确的方式提供内容.... 感谢...