Router cache middleware for koa@1.
npm i koa-router-cache --save
cache(app, options)
Options:
- key:
{String|GeneratorFunction}
cache key. (Required) - expire:
{Number}
expire time, inms
. (Required) - get:
{GeneratorFunction}
custom getter function for getting data from cache. (Required) - set:
{GeneratorFunction}
custom setter function for setting data to cache. (Required) - passthrough:
{GeneratorFunction}
whether pass request through, return an object. (Required)- shouldCache: {Boolean} whether cache this result
- shouldPass: {Boolean} whether pass this request through
- evtName:
{String}
event name for destroy cache. (Optional) - destroy:
{function}
destroy cache. (Optional) - pathToRegexp
{Object}
pathToRegexp options, seehttps://github.com/pillarjs/path-to-regexp#usage
. (Optional)
koa-router-cache
build-in simple MemoryCache
and RedisCache
, also you can write by yourself.
MemoryCache
'use strict';
var app = require('koa')();
var cache = require('koa-router-cache');
var MemoryCache = cache.MemoryCache;
var count = 0;
app.use(cache(app, {
'GET /': {
key: 'cache:index',
expire: 2 * 1000,
get: MemoryCache.get,
set: MemoryCache.set,
passthrough: MemoryCache.passthrough,
evtName: 'clearIndexCache',
destroy: MemoryCache.destroy
}
}));
app.use(function* () {
if (this.path === '/') {
this.body = count++;
if (count === 3) {
count = 0;
this.app.emit('clearIndexCache');
}
}
});
app.listen(3000, function () {
console.log('listening on 3000.');
});
RedisCache
'use strict';
var app = require('koa')();
var cache = require('koa-router-cache');
var RedisCache = cache.RedisCache();// or RedisCache(client)
var count = 0;
app.use(cache(app, {
'GET /': {
key: 'cache:index',
expire: 2 * 1000,
get: RedisCache.get,
set: RedisCache.set,
passthrough: RedisCache.passthrough,
evtName: 'clearIndexCache',
destroy: RedisCache.destroy
}
}));
app.use(function* () {
if (this.path === '/') {
this.body = {
count: count++
};
if (count === 3) {
count = 0;
this.app.emit('clearIndexCache');
}
}
});
app.listen(3000, function () {
console.log('listening on 3000.');
});
another usage:
// Guests share one index page cache
GET /': {
key: 'cache:index',
expire: 10 * 1000,
get: MemoryCache.get,
set: MemoryCache.set,
destroy: MemoryCache.destroy,
passthrough: function* passthrough(_cache) {
// Guests
if (!this.session || !this.session.user) {
if (_cache == null) {
return {
shouldCache: true,
shouldPass: true
};
}
this.type = 'text/html; charset=utf-8';
this.set('content-encoding', 'gzip');
this.body = _cache;
return {
shouldCache: true,
shouldPass: false
};
}
// Logged-in users
return {
shouldCache: false,
shouldPass: true
};
}
}
npm test
MIT