2.1.1 • Published 8 years ago

@tonybadguy/call-me-maybe v2.1.1

Weekly downloads
3,356
License
MIT
Repository
github
Last release
8 years ago

@tonybadguy/call-me-maybe

npm version Build Status codecov

A Node.js module for creating REST clients with easy request model templating and straightforward extensibility

A simple GET request :+1:

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);
});

POST with body :sparkling_heart:

send({
  url: 'https://httpbin.org/post',
  method: 'POST',
  body: 'my data'
}).then(response => {
  console.log(response.body);
  console.log(response.jsonBody.data); // 'my data'
});

POST with object as json body :sparkles::sparkling_heart::sparkles:

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.

POST with object as urlencoded body :sparkles::scream::sparkles:

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.

Make it fancy with urlParams :sparkles::sparkling_heart::scream::sparkling_heart::sparkles:

send({
  url: 'https://httpbin.org/{foo}',  // 'https://httpbin.org/get'
  urlParams:{
    foo:'get'
  }
}).then(response => {
  console.log(response.body);
});

Or with a query :hand::dollar::dollar::dollar:

send({
  url: 'https://httpbin.org/get',  // 'https://httpbin.org/get?foo=bar%20baz'
  query:{
    foo:'bar baz'
  }
}).then(response => {
  console.log(response.body);
});

Set headers :collision::dizzy_face::collision:

send({
  url: 'https://httpbin.org/get',
  headers:{
    'x-my-header':'oh hai'
  }
}).then(response => {
  console.log(response.body);
});

Set bearer token authorization header :collision::revolving_hearts::dizzy_face::revolving_hearts::collision:

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.

Handle non-200 status :fire::poop::fire::ok_hand:

send({
  url: 'https://httpbin.org/status/500'
}).then(response => {
  // won't be called
}).catch(error => {
  console.log(error.response.statusCode); // 500
});

All features above are enabled by default

  • 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

Advanced: Overriding default filters :rocket:

'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);
});

Advanced: Example custom request filter :rocket::rocket:

'use strict';

// a filter that always sets the request body to 'hello world!'
module.exports = {
  filter: (request) => {
    request.body = 'hello world!';
  
    return request;
  }
};

Advanced: Custom response filters are exactly the same :rocket::rocket:

'use strict';

// a filter that always sets the response body to 'hello world!'
module.exports = {
  filter: (response) => {
    response.body = 'hello world!';
  
    return request;
  }
};
2.1.1

8 years ago

2.1.0

8 years ago

2.0.1

10 years ago

2.0.0

10 years ago

1.1.1

10 years ago

1.1.0

10 years ago

1.0.4

10 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.0

10 years ago