реализация catbox-диска в хапийсе 17 - PullRequest
0 голосов
/ 30 октября 2018

Я совершенно заблудился, пытаясь настроить простую систему кэширования 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()?

...