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); }