client/src/api/APIClient.js
changeset 62 b2514a9bcd49
child 83 76a4e4b11762
equal deleted inserted replaced
61:7586b4a11c32 62:b2514a9bcd49
       
     1 class APIClient {
       
     2   constructor(baseURL) {
       
     3     this.baseURL = baseURL;
       
     4   }
       
     5 
       
     6   setStore = (store) => {
       
     7     this.store = store;
       
     8   }
       
     9 
       
    10   createRequest = (method, uri, data, headers) => {
       
    11 
       
    12     headers = headers || new Headers();
       
    13     headers.append("Content-Type", "application/json");
       
    14 
       
    15     var options = {
       
    16       method: method,
       
    17       headers: headers,
       
    18     };
       
    19 
       
    20     if (data) {
       
    21       options.body = JSON.stringify(data);
       
    22     }
       
    23 
       
    24     // TODO : use URL-module to build URL
       
    25     return new Request(this.baseURL + uri, options);
       
    26   }
       
    27 
       
    28   getToken = () => {
       
    29     const state = this.store.getState();
       
    30     return state['token'];
       
    31   }
       
    32 
       
    33   hasToken = () => {
       
    34     const token = this.getToken();
       
    35 
       
    36     return token !== null && token !== '';
       
    37   }
       
    38 
       
    39   createAuthorizedRequest = (method, uri, data) => {
       
    40 
       
    41     var headers = new Headers(),
       
    42         token = this.getToken() || '';
       
    43     headers.append("Authorization", "JWT " + token);
       
    44 
       
    45     return this.createRequest(method, uri, data, headers);
       
    46   }
       
    47 
       
    48   request = (method, uri, data) => {
       
    49     console.log(method + ' ' + uri);
       
    50     var req = this.hasToken() ? this.createAuthorizedRequest(method, uri, data) : this.createRequest(method, uri, data);
       
    51     return this.fetch(req, { credentials: 'include' });
       
    52   }
       
    53 
       
    54   get = (uri, data) => {
       
    55     return this.request('GET', uri, data);
       
    56   }
       
    57 
       
    58   post = (uri, data) => {
       
    59     return this.request('POST', uri, data);
       
    60   }
       
    61 
       
    62   put = (uri, data) => {
       
    63     return this.request('PUT', uri, data);
       
    64   }
       
    65 
       
    66   fetch = (req) => {
       
    67     return new Promise((resolve, reject) => {
       
    68       fetch(req)
       
    69         .then((response) => {
       
    70           if (response.ok) {
       
    71             return response.json().then((data) => resolve(data));
       
    72           } else {
       
    73             return response.json().then((data) => reject(data));
       
    74           }
       
    75         });
       
    76     });
       
    77   }
       
    78 }
       
    79 
       
    80 export default APIClient