2017-06-24 4 views
0

Ich versuche, ein Schema zu erstellen, um Anfragen von einer API-Middleware abzufangen und zu behandeln, aber aus irgendeinem Grund kann ich keine JSON-Antworten von meinem richtig behandeln API-Endpunkt Das folgende Snippet funktioniert einwandfrei für Serverantworten, die in JSON formatiert sind, aber sagen, ein Benutzer hat ein ungültiges Token, der Server gibt eine einfache Unauthorized Access-Antwort zurück, die ich nicht verarbeiten kann, obwohl ich einen Fehlerrückruf an die json() - Zusage liefere . Die Antwortnachricht für den nicht autorisierten Zugriff geht im folgenden Schema verloren.Behandlung von Nicht-JSON-Antwort mit einem Body.json() Versprechen

const callAPI =() => { fetch('http://127.0.0.1:5000/auth/', { 
     method: 'GET', 
     headers: { 
      'credentials': 'include', 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      'Authorization': 'Basic bXlKaGJHY2lPaUpJVXpJMU5pSXNJbVY0Y0NJNk1UUTVPRE15TVRNeU5pd2lhV0YwSWpveE5EazRNak0wT1RJMmZRLmV5SnBaQ0k2TVgwLllFdWdKNF9YM0NlWlcyR2l0SGtOZGdTNkpsRDhyRE9vZ2lkNGVvaVhiMEU6' 
     } 
    }); 
    }; 

    return callAPI().then(res => { 
     return res.json().then(responseJSON => { 
      if(responseJSON.status === 200){ 
       return dispatch({ 
        type: type[1], 
        data: responseJSON, 
        message: success 
       }); 
      } else if(responseJSON.status === 401) { 
       return dispatch({ 
        type: type[2], 
        message: responseJSON.message 
       }); 
      } 
      return Promise.resolve(json); 
     }, (err) => { 
      console.log(err.toString(), ' an error occured'); 
     }); 
    }, err => { 
     console.log('An error occured. Please try again.'); 
    }); 

Antwort

1

Versuchen Sie, Ihre Response-Handling-Code in einem try...catch Block so wickeln:

return callAPI().then(res => { 
    try { 
     return res.json().then(responseJSON => { 
      [...] 
    catch(e) { 
     console.error(e); 
    } 
}); 

Body.json() wirft, wenn der Körper JSON ist eigentlich nicht. Daher sollten Sie überprüfen, ob der Körper enthält JSON vor Sie rufen json() darauf an. Siehe https://developer.mozilla.org/en-US/docs/Web/API/Response.

Verwandte Themen