0.1.27 • Published 3 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-Control
headers:no-cache
: InGET
requests, bypass cache, and returns live responseno-store
: InGET
requests, will not cache the responsemax-age
:- In
GET
requests, communicates the TTL - In
GET
requests, allows to set per-request TTL
- In
- Extend
Cache-Control
addingdelete-cache
which 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-cache
is 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.json
is 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
urlsFromFile
option toconfig.warmer
to support: APIFilepath
: Swagger API filepathHARFilepath
: Network filepath