NodeJS重新调整APIcaching的最佳实践

我对NodeJS非常陌生,我正在使用restify构build我的第一个API。 我想找出什么是caching响应数据的最佳做法 – 每个API调用都必须有自己的caching时间。

我已经看过res.cache(),但似乎只有每个用户的请求,而不是全局应用程序caching。

然后我看着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); } }); }; 

有人可以请我正确的方向吗? 我不知道在哪里添加caching部分?

从库文件: 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); 

在您的代码中,我将添加cache.before之后,您将清理path,因为这将保存在Redis中。 每一条caching中都应该包含next()

我结束了使用节点caching这是很容易使用,因为我来自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); }