A Node.js module for creating REST clients with easy request model templating and straightforward extensibility
const send = require('@tonybadguy/call-me-maybe');
send({
url: 'https://httpbin.org/get'
}).then(response => {
console.log(response.statusCode);
console.log(response.body);
console.log(response.headers);
console.log(response.jsonBody.origin);
}).catch(error => {
console.log(error);
});
send({
url: 'https://httpbin.org/post',
method: 'POST',
body: 'my data'
}).then(response => {
console.log(response.body);
console.log(response.jsonBody.data); // 'my data'
});
send({
url: 'https://httpbin.org/post',
method: 'POST',
jsonBody: {
foo: 'bar'
}
}).then(response => {
console.log(response.body);
console.log(response.jsonBody.json.foo); // 'bar'
});
Content-Type
header is automatically set to application/json
.
send({
url: 'https://httpbin.org/post',
method: 'POST',
urlencodedBody: {
foo: 'bar'
}
}).then(response => {
console.log(response.jsonBody.form.foo); // 'bar'
});
Content-Type
header is automatically set to application/x-www-form-urlencoded
.
send({
url: 'https://httpbin.org/{foo}', // 'https://httpbin.org/get'
urlParams:{
foo:'get'
}
}).then(response => {
console.log(response.body);
});
send({
url: 'https://httpbin.org/get', // 'https://httpbin.org/get?foo=bar%20baz'
query:{
foo:'bar baz'
}
}).then(response => {
console.log(response.body);
});
send({
url: 'https://httpbin.org/get',
headers:{
'x-my-header':'oh hai'
}
}).then(response => {
console.log(response.body);
});
This is a shortcut for setting the Authorization header.
send({
url: 'https://httpbin.org/get',
bearerToken: 'mytoken'
}).then(response => {
console.log(response.body);
});
Authorization
header is set to Bearer mytoken
.
send({
url: 'https://httpbin.org/status/500'
}).then(response => {
// won't be called
}).catch(error => {
console.log(error.response.statusCode); // 500
});
- They are implemented using pluggable filter modules on request / response
- You can customize which filters to use via optional params of the send() function
- You can write your own filters
'use strict';
const send = require('@tonybadguy/call-me-maybe');
const jsonBodyFilter = require('@tonybadguy/call-me-maybe/lib/response-filters/json-body');
const request = {
url: 'https://httpbin.org/get'
};
const requestFilters = []; // don't use any of the default request filters
const responseFilters = [jsonBodyFilter]; // only use the json body filter
send(request, requestFilters, responseFilters).then(response => {
console.log(response);
});
'use strict';
// a filter that always sets the request body to 'hello world!'
module.exports = {
filter: (request) => {
request.body = 'hello world!';
return request;
}
};
'use strict';
// a filter that always sets the response body to 'hello world!'
module.exports = {
filter: (response) => {
response.body = 'hello world!';
return request;
}
};