2016-03-29 17 views
1

私はNodeJSを初めて使用しています。私はrestifyを使用して最初のAPIを構築しています。 応答データをキャッシュするためのベストプラクティスを知りたい - 各API呼び出しには独自のキャッシュ時間が必要です。NodeJS APIキャッシングのベストプラクティス

私はres.cache()を見てきましたが、それはユーザーの要求ごとであり、グローバルアプリケーションキャッシュではないようです。

私はrestify-cacheを見ましたが、ドキュメンテーションは使用方法を明確に教えていませんでした。

私のアプリケーションは、このように動作します:

server.jsコード:

var restify = require('restify'); 
var mysqlDB = require('./config/connection'); 

// REST server declaration and configuration 
var server = restify.createServer({ 
    name: 'test-api', 
    version: '0.0.1' 
}); 

server.pre(restify.pre.sanitizePath()); 
server.use(restify.queryParser()); 
server.use(restify.acceptParser(server.acceptable)); 
server.use(restify.queryParser()); 
server.use(restify.bodyParser()); 

server.listen(9007, function() { 
    console.log('%s listening at %', server.name, server.url); 
    mysqlDB.handleDisconnect(); 
    console.log(new Date() +': Started Cricket API on port 9007'); 
}); 

var routes = require('./routes')(server); 

routes.jsコード:

module.exports = function(app) { 
app.get('/', function(req, res, next) { 
    return res.send("You have reached the test API"); 
}); 

var fixtures = require('./controllers/fixtures'); 
    app.get('/getfixtures', fixtures.getFixtures); // Get All Fixtures 
}; 

fixtures.jsコードスニペット:

this.getFixtures = function (req, res, next) { 

res.header("Access-Control-Allow-Origin", "*"); 
res.header("Access-Control-Allow-Headers", "X-Requested-With"); 

console.log("Get All Fixtures"); 
var mysql = mysqlDB.getConnection(); 

var query = "SELECT * FROM fixtures WHERE fixture_date >= CURDATE() ORDER BY fixture_date, fixture_time";   
     mysql.query(query,function(err,rows){ 
     if(err) { 
      var status = mysqlDB.getErrorStatus(err.code); 
      return res.status(status.code).send("Error : "+ status.Message);     
     } else { 
      var data = []; 
      for (i in rows){ 
      var item = rows[i]; 

      var output = util.formatDate(item.fixture_date); 
      item.fixture_date = output; 

      data.push(item); 
      }; 

      return res.send(data); 
     } 
     }); 
    }; 

誰かが感謝しますか?私は正しい方向に?キャッシュ部分をどこに追加するのか分かりません。ライブラリファイルから

答えて

0

私は使用を終了しましたnode-cache 私はJava/Play Frameworkのバックグラウンドから来ていますので、使いやすくなっています。

使用例:

var nodeCache = require("node-cache"); 
var myCache = new nodeCache(); 

var cachedValue = myCache.get("alltests", true); 

if (cachedValue != undefined) { 
    return res.send(cachedValue); 
} else { 
    // Do work here and then: 
    success = myCache.set("alltests", valueHere, cacheTime); 
} 
1

server.use(cache.before);は、要求がRedisのに行くとあればheader_{url}キーとpayload_{url}終了を確認し、処理され、その場合に値が返される前にロードするためにトリガされるミドルウェアです。

この要旨で述べたようにあなたはそれを置くことができます:あなたのコードで https://gist.github.com/jeffstieler/3d84fa5468c7eadb7685

var server = restify.createServer({ 
    name: 'test-api', 
    version: '0.0.1' 
}); 

server.pre(restify.pre.sanitizePath()); 
server.use(cache.before); 
server.use(restify.queryParser()); 
server.use(restify.acceptParser(server.acceptable)); 
server.use(restify.queryParser()); 
server.use(restify.bodyParser()); 
server.on('after', cache.after); 

を、これはRedisの中に保存されるようにパスをサニタイズした後、私はcache.beforeを追加します。 next()もキャッシュされたすべてのルートに含める必要があります。