0.0.11 • Published 2 years ago

@comodinx/cache v0.0.11

Weekly downloads
-
License
ISC
Repository
gitlab
Last release
2 years ago

Cache

@comodinx/cache is a Node.js cache helper.

Index

Download & Install

NPM

For use with redis

    npm install @comodinx/cache redis

For use with memory cache

    npm install @comodinx/cache memory-cache

Source code

$ git clone https://gitlab.com/comodinx/cache.git
$ cd cache
$ npm install

How is it used?

Configure

Environment variableValueDefault value
CACHE_ENABLEDtrue/falsetrue
CACHE_TYPEmemory/redis'memory'

Only for Redis

Environment variableDefault valueValue
CACHE_HOSTredis hostlocalhost
CACHE_PORTredis port6379

Only for API cache middleware

Environment variableValueDefault value
CACHE_MIDDLEWARE_DURATIONnumber unit'1 hour'
CACHE_HEADER_CONTROLcache control header name'cache-control'
const cache = require('@comodinx/cache');

// Simple usage
await cache.put('foo', 'bar');
const foo = await cache.get('foo');
console.log(foo);

// Expiration time usage
await cache.put('cash', 'yes', 100);
const cash = await cache.get('cash');
console.log('I have cash? ' + cash);

setTimeout(() => {
  const cash = await cache.get('cash');
  console.log('I have cash? ' + cash);
}, 200);

// Print on console:
//
// bar
// I have cash? yes
// I have cash? undefined

Middleware

Inspirated on apicache

API response caching middleware for Express/Node.

Simple usage

const { apicache } = require('@comodinx/cache');
const express = require('express');
const app = express();
const port = 3000;

app.use(apicache('1 hour'));

app.get('/', (req, res) => {
    res.send({ foo: 'bar' });
});

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`);
});

Or at a specific endpoint.

const { apicache } = require('@comodinx/cache');
const express = require('express');
const app = express();
const port = 3000;

app.get('/', apicache('1 hour'), (req, res) => {
    res.send({ foo: 'bar' });
});

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`);
});

Time format

{number} {unit time}

Available unit time
m | ms
minute | minutes
hour | hours
day | days
week | weeks
month | months

Available options

{
  enabled:             process.env.CACHE_ENABLED,                           // if false or undefined, turns off caching globally (useful on dev)
  defaultDuration:     process.env.CACHE_MIDDLEWARE_DURATION || '1 hour',   // should be either a number (in ms) or a string, defaults to '1 hour'
  headerCacheControl:  process.env.CACHE_HEADER_CONTROL || 'cache-control', // should be either a string, defaults to 'cache-control'
  respectCacheControl: process.env.CACHE_RESPECT_HEADER_CONTROL,            // should be either a boolean (true | 1), defaults to false
  cacheKey:            req.originalUrl || req.url,                          // should be either a strong or a function (in function case, return a string custom key), defaults to req.originalUrl || req.url
  statusCode:          {                                                    // list of status codes that should never be cached
    include: [],
    exclude: []
  },
  headerBlacklist:     []                                                   // list of headers that should never be cached
}

Other ways of use

Use apicache with custom options

app.get('/', apicache(), (req, res) => /* ... */);

// OR

app.get('/', apicache('2 hours', 'my-custom-cache-key'), (req, res) => /* ... */);

// OR

app.get(
    '/',
    apicache({
        duration: '2 hours'
        cacheKey: 'my-custom-cache-key'
    }),
    (req, res) => /* ... */
);

For only cache success responses, use apicache.ok (status code between 200 - 299)

app.get('/', apicache.ok(), (req, res) => /* ... */);

// OR

app.get('/', apicache.ok('2 hours', 'my-custom-cache-key'), (req, res) => /* ... */);

// OR

app.get(
    '/',
    apicache.ok({
        duration: '2 hours'
        cacheKey: 'my-custom-cache-key'
    }),
    (req, res) => /* ... */
);

For only cache success responses, use apicache.ok (status code between 200 - 299)

app.get('/', apicache.ok(), (req, res) => /* ... */);

// OR

app.get('/', apicache.ok('2 hours', 'my-custom-cache-key'), (req, res) => /* ... */);

// OR

app.get(
    '/',
    apicache.ok({
        duration: '2 hours'
        cacheKey: 'my-custom-cache-key'
    }),
    (req, res) => /* ... */
);

Tests

In order to see more concrete examples, I INVITE YOU TO LOOK AT THE TESTS :)

Run the unit tests

npm test
0.0.10

2 years ago

0.0.11

2 years ago

0.0.9

2 years ago

0.0.8

2 years ago

0.0.7

2 years ago

0.0.5

3 years ago

0.0.6

3 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago