hapi-cache-manager

Manage your Hapi catbox cache through REST endpoints and server methods.

Usage no npm install needed!

<script type="module">
  import hapiCacheManager from 'https://cdn.skypack.dev/hapi-cache-manager';
</script>

README

Hapi Cache Manager

NPM version Build Status Dependency Status DevDependency Status Coverage Status

Hapi Cache Manager plugin

Manage your Catbox cache through REST endpoints and server methods.

Plugin options

  • namespace - (Default: cache) Namespace for methods registered by the plugin.
  • dependencies - (Default: []) An array of plugin name strings that must be registered before cache manager
  • invalidate - Cache invalidation options object
    • path - (Default: /cache/invalidate) Server endpoint to expose through DELETE method
    • auth - (Default: false) Hapi auth strategy to use for cache invalidation endpoint
  • statistics - Cache statistics options object
    • path - (Default: /cache/statistics) Server endpoint to expose through GET method
    • auth - (Default: false) Hapi auth strategy to use for cache statistics endpoint

Installation

const Hapi = require('hapi');
const CacheManager = require('hapi-cache-manager');

const server = new Hapi.Server();
server.connection({ port: 3000 });

server.register({
    register: CacheManager,
    options: {                         // default options
        namespace: 'cache',            // server methods namespace
        dependencies: [],              // plugin dependencies
        invalidate: {
          path: 'cache/invalidate',    // cache invalidation endpoint
          auth: false                  // cache invalidation auth strategy
        },
        statistics: {
          path: 'cache/statistics',    // cache invalidation endpoint
          auth: false                  // cache invalidation auth strategy
        }
    }
}, (err) => {

    if (err) {
        throw err;
    }
});

server.start((err) => {
    if (err) {
      throw err;
    }
    console.log('Server started');
});

Cache Statistics

You can get cache statistics for a single method or for all methods registered on the server:


# get statistics for all methods
curl http://localhost:3000/cache/statistics
# {
#   'somemethod': {
#     sets: 0, gets: 2, hits: 1, stales: 0, generates: 1, errors: 0
#   },
#   'someothermethod': { ... } }

# get statistics for a single method
curl http://localhost:3000/cache/statistics\?name\=somemethod
# {
#   sets: 0, gets: 3, hits: 2, stales: 0, generates: 1, errors: 0
# }

Cache Invalidation

You can drop as many cached keys for as many methods as you want with either a single external request or internally by calling a server method.

const payload = {
    data: [
        { name: 'methodname', keys: ['blabla', '123'] },
        { name: 'someothermethodname', keys: ['abc'] },
        { ... }
    ]
};

// through REST
server.inject({ method: 'DELETE', url: '/cache/invalidate', payload: payload }, (res) => {
    console.log(res.statusCode)
    // 204
    console.log(res.payload == '');
    // true
});

// through server method
server.methods.cache.invalidate(payload, (err, res) => {
});

MIT Public License.