MUHB
Method, URL, Headers and Body
- Easy to read HTTP requets.
- Run over promises.
- Built-in assertion functionality.
- Send many request over pooling strategy.
- NO external dependencies
Usage
Install with: npm i muhb
.
Getting NodeJS homepage:
const muhb = require('muhb');
var { status, headers, body } = await muhb('get', 'https://nodejs.org/en/');
Shorthands
MUHB exposes a short signature for all HTTP verbs:
method ( String url [, Object headers] [, String body] )
Posting a random form:
const { post } = require('muhb');
var { status, headers, body } = await post('https://nodejs.org/en/', 'key=value&key=value');
Sending headers:
const { put } = require('muhb');
var { status, headers, body } = await put(
'https://nodejs.org/en/',
{ myHeader: 'example' },
'key=value&key=value'
);
If you would like MUHB to not generate automatic content and date headers, send
a ghost parameter like this:
const { put } = require('muhb');
var { status, headers, body } = await put(
'https://nodejs.org/en/',
{ 'no-auto': true, myHeader: 'example' },
'key=value&key=value'
);
Having all available muhb methods:
const muhb = require('muhb');
muhb.get
muhb.post
muhb.patch
muhb.del
muhb.put
muhb.head
muhb.options
If you need to access the nodejs res
object, all muhb methods return it modified
to have our status
and body
keys.
const { get } = require('muhb');
let res = await get('https://nodejs.org/en/');
Assertions
Testing response data:
var { assert } = await get('https://example.com');
assert.body.exactly('foobar');
assert.body.contains('oba');
assert.body.match(/oo.a/);
assert.body.type('application/json').length(23);
assert.body.json
.hasKey('foo')
.match('foo', 'bar')
.empty();
assert.body.json.array
.match(1, 'bar')
.includes('foo')
.length(2)
.empty();
assert.status.is(200);
assert.status.not(400);
assert.status.in([ 200, 203, 404 ]);
assert.status.notIn([ 500, 403, 201 ]);
assert.status.type(2);
assert.status.notType(5)
assert.headers
.has('authorization')
.match('connection', 'close');
Authentication
As of now the only auth methods supported are Basic and MD5 Digest.
You must ensure your server responds with 401
and a WWW-Authenticate
header
so muhb knows to perform the auth.
Then just send your credentials in the headers object as follows:
let { body } = await post('http://example.com', {
auth: { username: 'my-user', password: 'my-pass' }
});
Or use the user and password syntax (they will be stripped from the URL before being sent).
let { body } = await post('http://my-user:my-pass@example.com');
Pooling
Define a pool with a max size of 10 requests and a timeout of 2 seconds:
const { Pool } = require('muhb');
let myPool = new Pool({ size: 10, timeout: 2000 });
Then run the pool over an array of say request bodies:
let bodies = 'abcdefghijklmnopqrstuvwxyz'.split('');
bodies.forEach( body => myPool.post('http://localhost/fail', body) );
Wait until all requests recive responses.
let responses = await myPool.done();
myPool.on('finish', responses => console.log(responses));
Wait for a single request in the pool to finish.
let res = await myPool.post('http://localhost/fail');
Act on every request that is responded.
myPool.on('response', (req, res) => {
console.log(res.status);
});
Contributing
We will be delighted to receive your issues
and MRs.