Я совершенно заблудился, пытаясь настроить простую систему кэширования catbox-disk
для моих маршрутов hapijs
. Вот настройка
// in server.js
const Config = require('./config.js);
const server = Hapi.server({
port: Config.port,
host: 'localhost',
cache : [{
name : 'diskCache',
engine : Disk,
cachePath : Config.cacheBase,
// cleanEvery hour
cleanEvery: 3600000,
partition : 'cache'
}]
});
// in route foo.js
const Wreck = require('wreck');
const Config = require('./config.js);
const foo = {
method: 'GET',
path: '',
handler: async function(request, h) {
const getFoo = request.server.cache({
cache: 'diskCache',
expiresIn: 10 * 1000,
segment: 'foo',
generateFunc: async ({id}) => {
const { res, payload } = await Wreck.get(id);
return payload.toString();
},
generateTimeout: 2000
});
try {
return await getFoo.get({ id: uri });
}
catch (err) {
console.error(err)
}
}
};
module.exports = foo;
Есть две проблемы с вышеуказанным.
Во-первых, это работает в первый раз, но когда я перезагружаю страницу, я получаю ошибку Cannot provision the same cache segment more than once
. Whaaa
Во-вторых, у меня более одной версии API, поэтому мне нужно извлечь getFoo()
изнутри handler
и поместить его в отдельный файл, чтобы я мог использовать его в разных местах. Но тогда как мне получить доступ к переменной server
в getFoo()
?