2016-03-29 52 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框架背景 - 希望它可以幫助別人在未來。

實例:

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()