web-dev-qa-db-fra.com

Comment attraper l'erreur 401 en utilisant la méthode fetch de javascript

Je dois détecter l'erreur 401 Code de réponse afin de pouvoir réessayer après l'obtention d'un nouveau jeton à partir du noeud final de jeton. J'utilise la méthode fetch pour obtenir les données de l'API.

   const request: Request = new Request(url.toString(), {
        headers: this.defaultRequestHeaders,
        method: "get",
        mode: "cors"
    });

   const headers: Headers = new Headers({
        "Accept": "application/json",
        "Content-Type": "application/json"
    });

   fetch(request)
        .then(function(response)
         {
          ///Logic code
         })
        .catch(function(error)
        {
          ///if status code 401. Need help here
        });
2
Vikrant Singh

Vous pouvez vérifier l'état et si ce n'est pas 200 (ok) jeter une erreur

 fetch("some-url")
    .then(function(response)
     {
      if(response.status!==200)
       {
          throw new Error(response.status)
       }
     })
    .catch(function(error)
    {
      ///if status code 401...
    });
2
Israel kusayev

Étant donné que 401 est en fait une réponse valide à une demande adressée à un serveur, il exécutera votre réponse valide quel que soit le résultat. La clause catch n'est utilisée que si des problèmes de sécurité se produisent ou si le serveur ne répond pas ou est tout simplement indisponible. Pensez-y comme si vous essayiez de parler à quelqu'un. Même s'ils disent "Je ne suis pas disponible actuellement" ou "Je n'ai pas cette information", votre conversation était toujours réussie . Seulement si un responsable de la sécurité se trouve entre vous et vous empêche de parler au destinataire, ou si le destinataire est dead , il y aura un échec réel dans la conversation et vous devrez y répondre en utilisant une catch .

Séparez simplement votre code de traitement des erreurs afin que vous puissiez le gérer dans les cas où la demande a abouti, mais n'a pas le résultat souhaité, aussi bien que lorsqu'une erreur réelle est générée:

function catchError( error ){

    console.log( error );

}

request.then(response => {

    if( !response.ok ){

        catchError( response );

    } else {

        ... Act on a successful response here ...

    }

}).catch( catchError );

J'utilise le response.ok suggéré par @Noface dans les commentaires, ce qui est logique, mais vous pouvez ne vérifier que le response.status === 401 si vous le souhaitez.

1
somethinghere

Vous pouvez vérifier la status de la réponse dans then

fetch(request)
  .then(function(response) {
    if (response.status === 401) {
      // do what you need to do here
    }
  })
  .catch(function(error) {});
0
Dario

Vous pouvez essayer ceci

fetch(request)
  .then(function(response) {
    if (response.status === 401) {
      // do what you need to do here
    }
  })
  .catch(function(error) {
        console.log('DO WHAT YOU WANT')
});
0
Salman Saleem