1.1.0 • Published 6 years ago

http-decorator v1.1.0

Weekly downloads
-
License
ISC
Repository
-
Last release
6 years ago

http decorator

axios + kaop-ts = <3

This library allows to easily implement AJAX calls without messing with Async stuff and with the same axios API.

You only have to include this decorator in one method, then the decorated method will be threated as then or catch for the call. Only receiving the params.

This tiny project is also a demo about writing custom decorators using kaop-ts API

fork me on Github

Get Started

install: npm install http-decorator

import: import { http } from 'http-decorator';

usage:

class SomeClass {
  @http({ url: 'localhost/resource'})
  public someMethod (params?: any, error?, result?): void {
    // error should be null if request was success
  }
}

someClassInstance.someMethod();
// $ curl localhost/resource
someClassInstance.someMethod({ id: 1 });
// $ curl localhost/resource?id=1

You should wrap this decorator with another function to set global axios options like headers or so:

import { http } from 'http-decorator';

// wrap a decorator to pass default arguments
export const get = (resourcePath) => http({ url: `http://jsonplaceholder.typicode.com${resourcePath}` })
export const post = (resourcePath) => http({ method: 'post', url: `http://jsonplaceholder.typicode.com${resourcePath}` })
export const put = (resourcePath) => http({ method: 'put', url: `http://jsonplaceholder.typicode.com${resourcePath}`, headers: { whatsoever } })

...

class SomeClass {

  // using the wrapper decorator
  @get('/users')
  public someMethod (params, error, result) {}
}

someClassInstance.someMethod();
// $ curl http://jsonplaceholder.typicode.com/users
}

How it works -> 17 lines

const axios = require('axios');
const { beforeMethod } = require('kaop-ts');

module.exports = {
  http: ({ method = 'get', ...options }) =>
  beforeMethod(function(meta){
    const [params] = meta.args;
    options[method === 'get' ? 'params' : 'data'] = params;
    axios({ method, ...options })
    .then(res => {
      meta.args = [params, null, res.data];
      this.next();
    })
    .catch(error => {
      meta.args = [params, error, null];
      this.next();
    })
  })
};
1.1.0

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.0

6 years ago

0.1.1

7 years ago

0.1.0

7 years ago

0.0.2

7 years ago

0.0.1

7 years ago