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