mojax
Version:
extendable ajax request module
118 lines (86 loc) • 4.87 kB
Markdown
# Getting started
**mojax** is a modular AJAX utility. It's built to be extended via middleware, allowing you to customize your ajax tool to your needs.
1. add mojax as a dependency to your project: `npm install mojax --save`
2. require mojax in your code: `var mojax = require("mojax");`
3. create the mojax instance you'll be using to make your HTTP requests: `var r = mojax.createRequester();`
From there you can add middleware, with the `use()` method, or make HTTP requests with the `req()` method.
## 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 **requester** (`requester.use()`), 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
### Creating middleware
Middleware is just a function that is provided an `object` argument. It is expected to manipulate the object, and return it.
The code below adds a timeout value of `5000 ms` to every request sent with `r.req()`:
```js
// creating my requester
var r = mojax.createRequester();
// my middleware
function addTimeout(params) {
// add timeout to all requests
params.timeout = 5000;
return params;
}
// adding the middle ware to my requester
r.use(addTimeout);
```
--------
## Modules
<dl>
<dt><a href="#module_mojax">mojax</a></dt>
<dd><p>mojax module</p>
</dd>
</dl>
## Typedefs
<dl>
<dt><a href="#requester">requester</a> : <code>object</code></dt>
<dd></dd>
</dl>
<a name="module_mojax"></a>
## mojax
mojax module
<a name="module_mojax.createRequester"></a>
### mojax.createRequester() ⇒ <code>[requester](#requester)</code>
**Kind**: static method of <code>[mojax](#module_mojax)</code>
**Summary**: creates a requester instance, which can be extended with middleware/addons,
and from which HTTP requests can be dispatched
**Access:** public
<a name="requester"></a>
## requester : <code>object</code>
**Kind**: global typedef
**Summary**: environment/interface used to add middleware and make HTTP requests
* [requester](#requester) : <code>object</code>
* [.use(fn)](#requester+use) ⇒ <code>object</code>
* [.req(params)](#requester+req)
<a name="requester+use"></a>
### requester.use(fn) ⇒ <code>object</code>
**Kind**: instance method of <code>[requester](#requester)</code>
**Summary**: adds a middleware function to the requester pipeline
**Returns**: <code>object</code> - this
| Param | Type | Description |
| --- | --- | --- |
| fn | <code>function</code> | middleware function to add to the requester's request pipeline |
<a name="requester+req"></a>
### requester.req(params)
**Kind**: instance method of <code>[requester](#requester)</code>
**Summary**: starts an async HTTP request, passing the configuration object through the middleware pipeline, and finally sending the request
| Param | Type | Default | Description |
| --- | --- | --- | --- |
| params | <code>object</code> | | configuration object used for the request |
| params.url | <code>string</code> | | URL used as the HTTP request target |
| params.method | <code>string</code> | | GET, POST, PUT, DELETE |
| [params.responseType] | <code>string</code> | <code>"text"</code> | json, text, xml, text/xml, text/html, arraybuffer, blob |
| [params.headers] | <code>object</code> | <code>{X-Requested-With:XMLHttpRequest}</code> | request headers |
| [params.data] | <code>string</code> | | data to send on POST or PUT request |
| [params.onSuccess] | <code>function</code> | <code>Array.<function()></code> | | callbacks triggered on successful request completion |
| [params.onFailure] | <code>function</code> | <code>Array.<function()></code> | | callbacks triggered on failed request completion |
| [params.onHeaders] | <code>function</code> | <code>Array.<function()></code> | | callbacks triggered when response headers are received from server |
| [params.onOpen] | <code>function</code> | <code>Array.<function()></code> | | callbacks triggered when request is opened |
| [params.timeout] | <code>number</code> | | sets the timeout value of the underlying XMLHttpRequest object (if supported) |