Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS restify API缓存最佳实践_Javascript_Node.js_Caching - Fatal编程技术网

Javascript NodeJS restify API缓存最佳实践

Javascript NodeJS restify API缓存最佳实践,javascript,node.js,caching,Javascript,Node.js,Caching,我对NodeJS非常陌生,我正在使用restify构建我的第一个API。 我想了解缓存响应数据的最佳实践是什么——每个API调用都必须有自己的缓存时间 我已经看过res.cache(),但这似乎只是每个用户请求的缓存,而不是全局应用程序缓存 然后我看了一下,但是文档没有清楚地告诉我如何使用它 我的应用程序的工作原理如下: server.js代码: var restify = require('restify'); var mysqlDB = require('./config/connectio

我对NodeJS非常陌生,我正在使用restify构建我的第一个API。 我想了解缓存响应数据的最佳实践是什么——每个API调用都必须有自己的缓存时间

我已经看过res.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);
        }
      });
  };
有人能告诉我正确的方向吗?我不知道在哪里添加缓存部分?

从库文件:
server.use(cache.before)
是一个中间件,在处理请求之前将被触发加载,转到Redis并检查
头{url}
键和
负载{url}
是否存在,在这种情况下返回值

你可以把它放在这个要点中:

在您的代码中,我将添加
缓存。在清理路径之前
之后,因为这将保存在Redis中。另外,每个缓存的路由中都应该包含一个
next()

我最后使用了 它很容易使用,因为我来自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);
}
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);
}