0.1.27 • Published 4 years ago
@wreckingball/cacher v0.1.27
cacher
cacher is an ExpressJS middleware written in TypeScript which caches responses.
Install
$ npm i --save @wreckingball/cacher@vX.Y.Z
Usage
See Config in /src/index.ts also src/example.ts. Run $ make dev to run the example.
Features
- Respect standard
Cache-Controlheaders:no-cache: InGETrequests, bypass cache, and returns live responseno-store: InGETrequests, will not cache the responsemax-age:- In
GETrequests, communicates the TTL - In
GETrequests, allows to set per-request TTL
- In
- Extend
Cache-Controladdingdelete-cachewhich invalidates the cache, if any, for the given request - Respect standard HTTP ETag
- Allows to specify a matcher:
- Can match any combination of any request component: method || path || query params || header || everything (
*)
- Can match any combination of any request component: method || path || query params || header || everything (
- Future proof, and extensible. It allows to use any storage. Storage can be changed without changing the implementation. Current storage implemented: Redis
- Injects storage in the request chain making it easy to use, and store data
- Automagically cache matched responses
- Automagically delete cache for non-GET operations (which changes data), unless
Cache-Control: persist-cacheis specified, or feature is disabled.
- Cache warmer:
- Every N
ms - One time only
- Configurable after-start-up-delay
- Batch request parallelize request calls speeding up the warming process
- Configurable delay between batch calls to protect the storage from overload
- Every N
- Administrative API:
- Delete cache by key
- Delete whole cache
- Introspect cache by key
How it works
A picture worth thousand words.

Development
- Clone repository
- Install dependencies
- Run
$ npm i --save @wreckingball/cacher
- Run
- Make changes
- Validate your changes with tests
- Run
$ make ci
- Run
- Open a pull request
CI/CD
- Code is merged into
main package.jsonis automagically bumped- Code is automagically tagged
- Release is automagically created
- Code is automagically pushed to NPM private repository
It's all magic! :)
Roadmap
- Add meta information about a cache entry, so it doesn't get warmed many times
- Add
urlsFromFileoption toconfig.warmerto support: APIFilepath: Swagger API filepathHARFilepath: Network filepath