Einfach ausgedrückt ist es eher ein Kontrollpunkt für jede http-Aktion. Jeder getätigte API-Aufruf wird durch diesen Interceptor geleitet.
Warum also zwei Abfangjäger?
Ein API-Aufruf besteht aus zwei Hälften, einer Anfrage und einer Antwort. Da es sich wie ein Prüfpunkt verhält, haben die Anforderung und die Antwort separate Abfangjäger.
Einige Anforderungs-Interceptor-Anwendungsfälle -
Angenommen, Sie möchten vor einer Anfrage prüfen, ob Ihre Anmeldeinformationen gültig sind. Anstatt einen API-Aufruf zu tätigen, können Sie ihn auf Interceptor-Ebene überprüfen, um festzustellen, ob Ihre Anmeldeinformationen gültig sind.
Angenommen, Sie müssen jeder gestellten Anforderung ein Token hinzufügen, anstatt die Token-Additionslogik bei jedem Axios-Aufruf zu duplizieren, können Sie einen Interceptor erstellen, der bei jeder gestellten Anforderung ein Token anfügt.
Einige Anwendungsfälle für Antwort-Interceptors -
Angenommen, Sie haben eine Antwort erhalten, und anhand der API-Antworten, die Sie ableiten möchten, können Sie ableiten, dass der Benutzer angemeldet ist. Im Antwort-Interceptor können Sie also eine Klasse initialisieren, die den angemeldeten Status des Benutzers verarbeitet, und diese für das von Ihnen verwendete Antwortobjekt entsprechend aktualisieren empfangen.
Angenommen, Sie haben eine API mit gültigen API-Anmeldeinformationen angefordert, haben jedoch nicht die gültige Rolle für den Zugriff auf die Daten. Sie können also eine Warnung vom Antwortabfangjäger auslösen, die besagt, dass der Benutzer nicht zulässig ist. Auf diese Weise werden Sie vor der nicht autorisierten API-Fehlerbehandlung bewahrt, die Sie für jede von Ihnen gestellte Axios-Anforderung ausführen müssten.
Könnte jetzt mit diesen Anwendungsfällen kommen.
Hoffe das hilft :)
BEARBEITEN
Da diese Antwort an Bedeutung gewinnt, finden Sie hier einige Codebeispiele
Der Anforderungsabfangjäger
=> Sie können das Konfigurationsobjekt von axios (falls erforderlich) drucken, indem Sie Folgendes tun (in diesem Fall durch Überprüfen der Umgebungsvariablen):
const DEBUG = process.env.NODE_ENV === "development";
axios.interceptors.request.use((config) => {
if (DEBUG) { console.info("✉️ ", config); }
return config;
}, (error) => {
if (DEBUG) { console.error("✉️ ", error); }
return Promise.reject(error);
});
=> Wenn man überprüfen möchte, welche Header übergeben werden / weitere generische Header hinzufügen möchte, ist diese im config.headers
Objekt verfügbar . Zum Beispiel:
axios.interceptors.request.use((config) => {
config.headers.genericKey = "someGenericValue";
return config;
}, (error) => {
return Promise.reject(error);
});
=> Falls es sich um eine GET
Anfrage handelt, finden Sie die gesendeten Abfrageparameter im config.params
Objekt.
Der Antwortabfangjäger
=> Optional können Sie sogar die API-Antwort auf Interceptor-Ebene analysieren und die analysierte Antwort anstelle der ursprünglichen Antwort weitergeben. Dies kann Ihnen die Zeit sparen, die Parsing-Logik immer wieder zu schreiben, wenn die API an mehreren Stellen auf dieselbe Weise verwendet wird. Eine Möglichkeit, dies zu tun, besteht darin, einen zusätzlichen Parameter im api-request
und den gleichen Parameter im Antwort-Interceptor zu übergeben, um Ihre Aktion auszuführen. Zum Beispiel:
axios.get("/city-list", { parse: true });
Einmal können wir im Antwort-Interceptor Folgendes verwenden:
axios.interceptors.response.use((response) => {
if (response.config.parse) {
}
return response;
}, (error) => {
return Promise.reject(error.message);
});
In diesem Fall wird die Manipulation immer dann ausgeführt, wenn sich ein parse
Objekt darin response.config
befindet. In den übrigen Fällen funktioniert sie unverändert.
=> Sie können sogar die ankommenden HTTP
Codes anzeigen und dann die Entscheidung treffen. Zum Beispiel:
axios.interceptors.response.use((response) => {
if(response.status === 401) {
alert("You are not authorized");
}
return response;
}, (error) => {
if (error.response && error.response.data) {
return Promise.reject(error.response.data);
}
return Promise.reject(error.message);
});