Einfache Kapselung von Axios und Beispielcode zur Verwendung

Einfache Kapselung von Axios und Beispielcode zur Verwendung

Vorwort

Als ich kürzlich ein Projekt erstellte, dachte ich über die Kapselung von Anfragen nach und dann darüber, wie ich sie kapseln könnte. Obwohl es für euch Große vielleicht eine Kleinigkeit ist, ist es für mich auch eine kleine Herausforderung. In meiner Vorstellung sollten einige grundlegende Konfigurationen und spezifische angeforderte Schnittstellen in zwei Dateien untergebracht werden, also habe ich zwei neue Dateien erstellt: axios.js und api.js

axios.js

axios.js dient hauptsächlich für einige grundlegende Konfigurationen von Axios: BaseURL-Anforderungs-Interceptor, Antwort-Interceptor usw.

importiere Axios von „Axios“;
importiere ElementUI von „element-ui“;
importiere „element-ui/lib/theme-chalk/index.css“;
Router aus „../router“ importieren;

Führen Sie zunächst Axios in das aktuelle JS ein. Der Zweck der Einführung von Elementen besteht darin, seine Komponenten im aktuellen JS zu verwenden, und der Zweck besteht darin, verschiedene Rückgabewerte direkt im Antwort-Interceptor aufzufordern. Der Router wird eingeführt, um Seiten entsprechend dem spezifischen Rückgabewert im Antwort-Interceptor umzuleiten. Wenn beispielsweise keine Berechtigung vorliegt, wird zur Anmeldeseite gesprungen.

wenn (Prozess.env.NODE_ENV === 'Entwicklung') {
  axios.defaults.baseURL = "API";
} sonst wenn (Prozess.Umgebung.NODE_ENV === 'Produktion') {
  axios.defaults.baseURL = "https://xxxxxxxxxx/index/";
}

Bei der BaseURL-Verarbeitung unterscheide ich zwischen Entwicklungsumgebung und Produktionsumgebung

//Der Anforderungs-Interceptor unterscheidet die Anforderungsheader beim Senden normaler Anforderungen und beim Senden von Formulardaten axios.interceptors.request.use((config) => {
  config.headers['Inhaltstyp'] = 'Anwendung/json';
  wenn (Konfigurationsmethode === 'post') {
    //Anforderungsheader für FormData, wenn (Object.prototype.toString.call(config.data) === '[object FormData]') {
      // Anforderungs-Interceptor-Verarbeitung config.headers['Content-Type'] = 'multipart/form-data';
    } sonst wenn (Object.prototype.toString.call(config.data) === '[Objekt String]') {
      config.headers['Inhaltstyp'] = 'Anwendung/x-www-form-urlencoded';
    }
  } anders {
    config.headers['Inhaltstyp'] = 'Anwendung/json';
  }
  Konfiguration zurückgeben;
});

//Antwort-Interceptor axios.interceptors.response.use(
  (Konfiguration) => {
    let Wert = Konfigurationsdaten;
    wenn (config.status && config.status === 200) {
      wenn (Typ des Wertes === 'Zeichenfolge') {
        wenn (Wert === 'Timeout') {
          ElementUI.MessageBox.confirm('Sie haben zu lange nicht gearbeitet oder Sie haben keine Berechtigung zum Arbeiten. Bitte gehen Sie zur Anmeldeseite und melden Sie sich erneut an?', 'Prompt', {
            confirmButtonText: 'Bestätigen',
            Typ: "Warnung"
          }).then(() => {
            router.push({ Name: 'login' });
          });
        }anders {
          ElementUI.Message.info(Wert);
        }
      }
    }
    Konfiguration zurückgeben;
  },
  (fehler) => {
    let-Wert = err.response.statusText;
    Schalter (Fehler.Antwort.Status) {
      Fall 400:
        ElementUI.Message.error('Das Syntaxformat ist falsch und der Server kann diese Anfrage nicht verstehen.')
        brechen;
      Fall 401:
      Fall 403:
      Fall 404:
      Fall 405:
        ElementUI.Message.warning(Wert);
        brechen;
      Standard:
        ElementUI.Message.error('Während des Vorgangs ist ein Fehler aufgetreten. Dieser Vorgang ist ungültig!' + Wert);
        brechen;
    }
    Fehlerantwort zurückgeben
  }
);

Für den Antwort-Interceptor verarbeite ich es entsprechend dem von meinem Backend zurückgegebenen Wert. Da ich nicht viel mit dem Backend gearbeitet habe, verarbeite ich einfach die Rückgabe.

Das Folgende ist ein Paket von Get und Post

exportiere asynchrone Funktion axiosGet(url, params = {}) {
  : Lassen Sie res = await axios.get(url, { params: params });
  wenn(res.status === 200){
    Rückgabewert.Daten
  }anders {
    throw res.statusText
  }
}

exportiere asynchrone Funktion axiosPost(url, params = {}) {
  let res = warte auf axios.post(URL, Parameter);
  wenn(res.status === 200){
    Rückgabewert.Daten
  }anders {
    throw res.statusText
  }
}

Verwenden Sie async und await, um den Rückgabewert zur Beurteilung direkt abzurufen. Wenn die Rückgabe erfolgreich ist, wird der Rückgabewert ausgegeben. Wenn nicht, wird ein Fehler ausgegeben.

Exportieren Sie abschließend die gekapselte Methode

api.js

In der gesamten api.js werden alle Schnittstellen im Projekt gespeichert

importiere { axiosGet, axiosPost } aus './axios'

Einführung von axios.js und Abrufen der gekapselten axiosGet- und axiosPost-Funktionen

Standard exportieren {
  getLogin:(params = {}) => {
    returniere axiosPost('/login', Parameter)
  },
  getUser:(params = {}) => {
    returniere axiosGet('http://localhost:3000/Benutzer', Parameter)
  }
}

Hier verwende ich zwei einfache Schnittstellen als Beispiele, und die Verarbeitung in api.js wurde abgeschlossen

Verwenden der konfigurierten Schnittstelle

An diesem Punkt ist unser Axios verpackt, und der nächste Schritt ist die Demonstration seiner Verwendung

importiere DbauditServer aus '@/server/api'
//Fügen Sie api.js in die Datei ein, um die Schnittstelle aufzurufen

let formData = neue FormData
formData.append('Passwort', this.formLabelAlign.password)
let res1 = await DbauditServer.getLogin(formData) //Rufen Sie es einfach auf und es wird normal funktionieren let res2 = await DbauditServer.getUser()

Natürlich kann es detaillierter sein. Denn wenn get und post vorher gekapselt werden, wird der Fehlerrückgabewert direkt geworfen. Daher kann der Aufruf der Schnittstelle auch mit try catch gekapselt werden, um eine spezifische Verarbeitung des Fehlers durchzuführen.

Zusammenfassen

Dies ist das Ende dieses Artikels über die einfache Kapselung und Verwendung von Axios. Weitere verwandte Inhalte zur einfachen Kapselung von Axios finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der Axios-Kapselung und des API-Schnittstellenmanagements in Vue
  • Detaillierte Erläuterung der Vue 2.0-Kapselungs-Axios-Notizen
  • Beispielcode mit Axios und Kapselung in Vue
  • Axios-Kapselungsmethode zur Behandlung verschiedener abnormaler Situationen in Anforderungen
  • Axios-Kapselung, Verwendung von Interceptors zur einheitlichen Verarbeitung von Schnittstellen, sehr ausführliches Tutorial (empfohlen)
  • Lösen Sie das Fehleraufforderungsproblem des gekapselten Anforderungsstatus von Vue Axios
  • Detaillierte Erklärung der Kapselung von Axios-Anfragen in Vue
  • So verwenden Sie Axios zum Kapseln von HTTP-Anfragen in Vue-Projekten
  • Ein Beispiel für die sekundäre Kapselung von Axios in Vue
  • Verwenden Sie async await, um die Axios-Methode zu kapseln

<<:  Analyse der MySQL-Ansichtsfunktionen und Anwendungsbeispiele

>>:  So lösen Sie das Problem von -bash: /usr/bin/yum: Keine solche Datei oder kein solches Verzeichnis nach der Eingabe von yum in Linux

Artikel empfehlen

MySQL-Lernnotizen zum Umgang mit doppelten Daten

MySQL verarbeitet doppelte Daten Einige MySQL-Tab...

Installationsschritte für die chinesische Eingabemethode von Ubuntu 20.04

Dieser Artikel installiert die Google-Eingabemeth...

Ein kurzer Vortrag über die parasitäre Kompositionsvererbung in JavaScript

Vererbung von Kompositionen Kombinationsvererbung...

Tutorial zur Installation von PHP auf CentOS über Yum

Lassen Sie mich zunächst vorstellen, wie Sie PHP ...

Einführung in die Verwendung des HTML-Basistags target=_parent

Der <base>-Tag gibt die Standardadresse oder...

Lösen Sie das Problem, dass ifconfig im Docker nicht verfügbar ist

Als ich kürzlich Docker lernte, stellte ich fest,...

Eine Untersuchung des JS-Operators im Problem

Die Sache ist: Jeder kennt „Speicherlecks“. Es gi...

So verwenden Sie @media in mobilen adaptiven Stilen

Allgemeiner Handy-Stil: @media alle und (Ausricht...

Prozessdiagramm für die Sitzungsfreigabe bei Tomcat Nginx Redis

1. Vorbereitung Middleware: Tomcat, Redis, Nginx ...

CSS-Syntax für Tabellenränder

<br /> CSS-Syntax für Tabellenränder Zu den ...

Webdesign: Die genaue Platzierung und Verwendung massiver Materialien

Durch dreimaliges Auswendiglernen können Sie sich...