gpt4 book ai didi

javascript - NodeJS restify API 缓存最佳实践

转载 作者:行者123 更新时间:2023-11-29 21:31:27 26 4
gpt4 key购买 nike

我是 NodeJS 的新手,我正在使用 restify 构建我的第一个 API。我想找出缓存响应数据的最佳做法 - 每个 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);
}
});
};

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

最佳答案

来自库文件: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,因为这将保存在 Redis 中。还应在缓存的每个路由中包含 next()

关于javascript - NodeJS restify API 缓存最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36285804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com