Axios. So erhalten Sie eine Fehlerantwort, auch wenn die API einen 404-Fehler zurückgibt, in try catch finally

Lesezeit: 2 Minuten

Benutzeravatar von Jacob Goh
Jakob Goh

für zB

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error(err);
  } finally {
    console.log(apiRes);
  }
})();

in finally, apiRes wird null zurückgeben.

Selbst wenn die API eine 404-Antwort erhält, enthält die Antwort immer noch nützliche Informationen, die ich verwenden möchte.

Wie kann ich die Fehlerantwort in verwenden finally wenn Axios einen Fehler auslöst.

https://jsfiddle.net/jacobgoh101/fdvnsg6u/1/

  • Vermutlich sind die nützlichen Informationen, von denen Sie sprechen, darin enthalten err? Ich kann nicht verstehen, warum Sie es in der wollen finally eher als das catchaber wenn doch, speichern Sie es einfach in der catch zu einer Variablen, auf die Sie in zugreifen können finally.

    – TJ Crowder

    17. Januar 2018 um 10:33 Uhr

  • @TJCrowder der Fehler in catch enthält nicht die API-Antwort. Wenn ich das umgehen kann, würde Ihre Methode funktionieren!

    – Jakob Goh

    17. Januar 2018 um 10:37 Uhr


  • Ja tut es. (Ich habe gerade die Dokumentation durchgesehen.)

    – TJ Crowder

    17. Januar 2018 um 10:42 Uhr

Nach die Dokumentationdie vollständige Antwort ist als verfügbar response Eigenschaft auf den Fehler.

Also würde ich diese Informationen in der verwenden catch Block:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    console.error("Error response:");
    console.error(err.response.data);    // ***
    console.error(err.response.status);  // ***
    console.error(err.response.headers); // ***
  } finally {
    console.log(apiRes);
  }
})();

Geige aktualisiert

Aber wenn du es haben willst finally Speichern Sie es stattdessen einfach in einer Variablen, die Sie dort verwenden können:

(async() => {
  let apiRes = null;
  try {
    apiRes = await axios.get('https://silex.edgeprop.my/api/v1/a');
  } catch (err) {
    apiRes = err.response;
  } finally {
    console.log(apiRes); // Could be success or error
  }
})();

  • Sie können auch die sehen err Typdefinition hier um andere nützliche Daten zu finden 🙂

    – Raffael Tavares

    31. Dezember 2020 um 11:50 Uhr


Laut AXIOS-Dokumentation (hier: https://github.com/axios/axios) Sie können durch validateStatus: false im Konfigurationsobjekt auf jede Axios-Anfrage.

z.B

axios.get(url, { validateStatus: false })
axios.post(url, postBody, { validateStatus: false })

Sie können auch eine Funktion wie diese übergeben: validateStatus: (status) => status === 200
Gemäß der Dokumentation ist das Standardverhalten eine Funktion, die true zurückgibt, wenn (200 <= Status < 300).

  • Vielen Dank! habe dies als Option genutzt const options = { method: 'GET', headers: { 'Accept': 'application/json'}, url: 'url, validateStatus: false };

    – Joviano Dias

    3. Dezember 2021 um 14:47 Uhr


  • Danke, hat wie am Schnürchen geklappt.

    – Cuado

    12. Januar 2022 um 14:42 Uhr

  • Danke, ich denke, dass try catch hässlich ist und die Codebasis überbläht. Das löst es…

    – Dennis

    23. März 2022 um 9:21 Uhr

  • Ich kann nicht glauben, wie viel Zeit ich damit verbracht habe, herauszufinden, warum ich 404 bekomme. Diese einfache Lösung war alles, was ich brauchte.

    – Ästhetikcode

    6. Oktober 2022 um 4:11 Uhr

Sie können den Statuscode behandeln:

Beispiel mit Ts:

let conf: AxiosRequestConfig = {};

    conf.validateStatus = (status: number) => {
        
        return (status >= 200 && status < 300) || status == 404
    }

    let response = await req.get(url, conf);

1438330cookie-checkAxios. So erhalten Sie eine Fehlerantwort, auch wenn die API einen 404-Fehler zurückgibt, in try catch finally

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy