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