mojax-cache
Version:
mojax request cache middleware
76 lines (57 loc) • 3.3 kB
Markdown
# Getting started
Add **mojax** and **mojax-cache** to your project:
`npm install mojax mojax-cache --save`
Require the two modules into your code, and create your mojax request instance:
```js
var mojax = require("mojax")(),
cache = require("mojax-cache");
mojax.use(cache());
```
## How mojax uses middleware
Middleware are used to manipulate the request parameters **before** the actual HTTP request is started.
When you add middleware to a mojax instance, the middleware function gets added to an internal queue.
Every time you make a request, the request parameters you have provided are piped through each middleware.
Each middleware **must return the request parameters object** for the next middleware to be called. Not returning the request parameters object
(i.e. returning `null` or `undefined`) is how you can cancel a request.
The mojax request method respects the following flow:
1. make a request: `req(params);`
2. your request parameters are *piped* through each middleware
3. the middleware transform your request parameters
4. the final (*transformed*) request parameters are used to send the HTTP request
5. the HTTP request triggers callbacks, based on its progress
### How mojax-cache works
Mojax-cache is a factory, when ever you call mojax cache you're creating a new `cacheController`, which is the middleware function you want to add to mojax. That's all you need to do.
#### inner workings
mojax-cache works by caching your successful GET requests by URL. The timestamp and body of each successful GET is cached.
When a new GET request is made, mojax-cache verifies if it has made the request before, if so it adds the `If-Modified-Since` header, wraps all onSuccess callbacks and adds a callback of it's own. From there, two things can happen:
- **server responds with 200**: mojax-cache's callback will cache the successful request
- **server responds with 304**: mojax-cache fetches the response data from its internal cache, and provides that to the onSuccess callbacks.
--------
## Modules
<dl>
<dt><a href="#module_mojax-cache">mojax-cache</a></dt>
<dd></dd>
</dl>
## Functions
<dl>
<dt><a href="#exp_module_mojax-cache--module.exports">module.exports()</a> ⇒ <code>function</code> ⏏</dt>
<dd></dd>
<dt><a href="#cacheController">cacheController()</a> ⇒ <code>object</code></dt>
<dd></dd>
</dl>
<a name="module_mojax-cache"></a>
## mojax-cache
<a name="exp_module_mojax-cache--module.exports"></a>
### module.exports() ⇒ <code>function</code> ⏏
**Kind**: global method of <code>[mojax-cache](#module_mojax-cache)</code>
**Summary**: creates a cacheController middleware instance
**Returns**: <code>function</code> - cacheController middleware function
<a name="cacheController"></a>
## cacheController() ⇒ <code>object</code>
**Kind**: global function
**Summary**: tracks all successful HTTP GET requests and caches their body response with a timestamp.
Once a URL has been cached, if it is re-requested, the controller adds the "If-Modified-Since" header to the request params.
If the server responds with a 304, the controller returns the cached data to the callbacks, allowing each callback to work unknowing of the
304 event.
**Access:** public
**Params**: <code>object</code> config - request configuration object