Der eigentliche Prozess der Einbindung von Axios in das Projekt

Der eigentliche Prozess der Einbindung von Axios in das Projekt

Vorwort

Beim Lernen und bei Projekten stoße ich häufig auf Axios. Bei den Projekten, die ich vorher gemacht habe, wurde Axios normalerweise konfiguriert, sodass ich immer einen allgemeinen Eindruck davon hatte. Vor kurzem hatte ich Gelegenheit, Axios manuell zu konfigurieren, also habe ich es übrigens aufgezeichnet und geteilt~

Vorteile der Axios-Kapselung

Die Vorteile der Axios-Kapselung sind eine einheitliche Verarbeitung, verbesserte Effizienz und einfache Wartung.

Sie können die Axios-Anforderungsschnittstelle wie folgt verwenden

axios.get('http://localhost:10086/Benutzer?ID=12345')
  .dann(Antwort => {
    //Vorgang nach Erfolg...
  })
  .catch(Fehler => {
    //Vorgang nach Fehler...
  });

Wenn es jedoch mehr Schnittstellenanforderungen und mehr Anforderungen gibt, führt das Schreiben eines solchen Codes an jeder Stelle im Projekt, an der eine Schnittstellenanforderung benötigt wird, zu einer Menge sich wiederholendem Code, was unsere Entwicklungseffizienz verringert und die Wartungskosten erhöht.

Verpackungsideen

Wir müssen Axios ein für alle Mal konfigurieren, damit sich die Konfiguration an die meisten Szenarien unseres Projekts anpassen kann. Wir können eine neue JS-Datei erstellen, eine neue Axios-Instanz mit benutzerdefinierter Konfiguration erstellen und dann die Grundkonfiguration der Instanz durchführen, in den Phasen vor der Anforderung (Verarbeitung des Anforderungstexts) und nach der Anforderung (Verarbeitung des Rückgabeergebnisses) einige der von uns benötigten Verarbeitungsschritte hinzufügen und die Datei dann zur Verwendung exportieren.

Konfigurationspriorität

Konfigurationen werden in einer Prioritätsreihenfolge zusammengeführt. Die Reihenfolge ist: Die Standardwerte der Bibliothek finden sich in lib/defaults.js, dann die Standardeigenschaft der Instanz und schließlich der Konfigurationsparameter der Anfrage. (Auf diese Weise können wir auch einige spezielle Szenen separat behandeln)

lib/defaults.js unter der Axios-Bibliotheksdatei im Ordner node_modules.

Benutzerdefinierte Instanzstandards

const Instanz = axios.create({
  Basis-URL: 'https://api.example.com'
});

Angeforderte Konfigurationsparameter

axios({   
Methode: 'get',   
URL: „http://bit.ly/2mTM3nY“,   
Antworttyp: 'Stream' }).dann(Funktion(Antwort) { Antwort.Daten.Pipe(fs.createWriteStream('ada_lovelace.jpg')) });

Axios-Instanzkonfiguration

1. Definieren Sie einige allgemeine Konfigurationen

BaseUrl festlegen

baseUrl ist im Allgemeinen in mehrere Adressen wie Produktion, Entwicklung und Test unterteilt. Wir können eine config.js erstellen, um sie zu speichern. Wenn es sich um Vue oder React handelt, können wir neue Umgebungs- und andere Dateien erstellen, um sie zu speichern. Die folgende baseUrl verwendet die Umgebungsvariablen von React.

  • Legen Sie die Timeout-Periode für die Anforderung fest
  • Legen Sie den Content-Type des Datenanforderungsformats fest (application/x-www-form-urlencoded, multipart/form-data, application/json...) usw.
Axios von „Axios“ importieren

exportiere const request = erstelleAxiosInstance()

Funktion erstelleAxiosInstance () {
  const Instanz = axios.create({
    Basis-URL: Prozess.Umgebung.REACT_APP_BASE_URL,
    Zeitüberschreitung: 5000,
    Überschriften: {
      // Sie können einen einheitlichen Anforderungsheader posten: {
        „Inhaltstyp“: „Anwendung/json“
      }
      ...
    }
  })
  Rückgabeinstanz
}

2. Fügen Sie vor der Anfrage einige erforderliche Vorgänge hinzu.

Beispielsweise müssen Sie ein Token in den Anforderungsheader einfügen

Verarbeitung leerer Anforderungsparameter

(Das folgende Beispiel übergibt einen leeren Namen und eine leere Personen-ID, was zu Mehrdeutigkeiten führen kann. Sollen wir den Parameterwert als leer erhalten oder diese Parameter ignorieren? Einige Backends führen einige Verarbeitungen durch, aber das Frontend sollte versuchen, dies zu vermeiden~)

Aktivieren Sie das Laden von Animationseffekten bei jeder Anforderung einer Schnittstelle usw.

  // Einen Anforderungs-Interceptor hinzufügen (etwas tun, bevor die Anforderung gesendet wird)
  Instanz.Interceptors.Request.use((Konfiguration) => {
      //Sie können eine Funktion hinzufügen, um den Ladeeffekt zu öffnen loading.open()  
      //Wenn das Token vorhanden ist, fügen Sie es dem Anforderungsheader-Token hinzu && (config.headers.Authorization = Token)
     // Filter null undefiniert '' Funktion in Anforderungsparametern cleanObject()
      Konfiguration zurückgeben
  })

3. Fügen Sie nach der Rückgabe der Anforderung eine Abfangoperation hinzu.

  • Verarbeitung erfolgreich zurückgegebener Daten

Beispielsweise können die vom Backend zurückgegebenen Daten in mehreren Ebenen verschachtelt sein. Sie können die benötigten Daten direkt zurückgeben, sodass der Geschäftscode die endgültigen Daten direkt abrufen kann, ohne sie jedes Mal dekonstruieren zu müssen.

  • Einheitliche Behandlung von Ausnahmen nach einem Fehler

Schnittstellenanforderungen können erfolgreich sein oder fehlschlagen. Wenn Sie den Fehlerlogikcode nicht bei jeder Schnittstellenanforderung neu schreiben möchten und er sich fast immer wiederholt, können Sie hier zentral eine einheitliche Ausnahmebehandlung für die Schnittstelle durchführen. Ermitteln Sie beispielsweise den Statuscode oder den angepassten Code des Backends und zeigen Sie die vom Backend zurückgegebene Fehleraufforderung an.

 // Einen Antwort-Interceptor hinzufügen (etwas mit den Antwortdaten machen)
  Instanz.Interceptors.Response.use((Antwort) => {
   //Sie können eine Funktion hinzufügen, um den Ladeeffekt zu schließen loading.close()  
      //Dekonstruieren Sie die zurückgegebenen Ergebnisdaten const res = response.data
      //Beurteile den benutzerdefinierten Code und gib die erfolgreichen Daten zurück const validateStatus = /^(2|3)\d{2}$/ //Ein Code, der mit 2 oder 3 beginnt, wird als erfolgreiche Anfrage betrachtet, if (validateStatus.test(res.code)) {
        return res //Gibt direkt die Daten zurück, die wir brauchen
      }
      //Beurteilen Sie den fehlgeschlagenen Code und geben Sie Eingabeaufforderungen usw. aus. if (res.code === 401) {
        Nachricht.Fehler(res.msg)
      } anders {
        Nachricht.Warnung(res.msg)
      }
      gibt Promise.reject(res) zurück
      },
      (Fehler) => {
      wird geladen.schließen() 
      wenn (Fehler.Antwort.Status === 401) {
        message.error('Token abgelaufen, bitte erneut anmelden!')
        removeStorageToken()
        setzeTimeout(() => {
          window.location.href = "/login"
        }, 2000)
      } anders {
        wenn (!window.navigator.onLine) {
          message.warning('Netzwerkanomalie, bitte prüfen Sie, ob die Netzwerkverbindung normal ist.')
        } sonst wenn (Fehlercode === 'ECONNABORTED') {
          message.warning('Anforderungs-Timeout')
        } anders {
          message.warning('Serverstörung, bitte kontaktieren Sie den Administrator')
        }
      }
      return Promise.reject(error) // Gibt den Fehler an die entsprechende Seite zurück}
      )

Es gibt einige Fehlerbehandlungen basierend auf HTTP-Statuscode und benutzerdefiniertem Code. Nachdem der Fehler hier abgefangen wurde, muss nicht jedes Mal, wenn die Seite die Geschäftsschnittstelle aufruft, eine Fehleraufforderungsverarbeitung durchgeführt werden. Natürlich sollte es entsprechend den Anforderungen verschiedener Projekte konfiguriert werden.

Einheitliche Verwaltung von Anforderungsschnittstellenmethoden

Im Allgemeinen schreiben wir alle Schnittstellenanforderungsmethoden zusammen, um eine einheitliche Verwaltung zu gewährleisten. Dies erleichtert auch die Suche und Wartung bei späteren Änderungen.

Wir können einen neuen Ordner zum Verwalten von API-Anfragen (z. B. „APIList“) erstellen, in den wir verschiedene Anforderungsdateien (hier nach Funktion unterteilt) legen. Beispielsweise speichert user.js benutzerbezogene Anfragen usw. Dann kann die Seite direkt auf die Methode verweisen, um einen Schnittstellenaufruf durchzuführen.

importiere { Anfrage } von '../axios'

// Benutzerinformationen abrufen Exportfunktion getUserInfo (userId) {
  Rückgabeanforderung.get(`/sys/user/info/${userId}`)
}

Rufen Sie die Methode einfach direkt in der Komponente oder Seite auf~

Abschließend hier ein vollständiges Beispiel! Sie können sich darauf beziehen ~

Diese Beispielkonfiguration ist für Vue oder React geeignet. Natürlich wird die Konfiguration jedes Projekts etwas anders sein. Sie sollten sie entsprechend Ihrem eigenen Projekt ändern und erweitern.

Axios von „Axios“ importieren

exportiere const request = erstelleAxiosInstance()

Funktion erstelleAxiosInstance () {
  const Instanz = axios.create({
    Basis-URL: Prozess.Umgebung.REACT_APP_BASE_URL,
    Zeitüberschreitung: 5000,
    Überschriften: {
      // Sie können einen einheitlichen Anforderungsheader posten: {
        „Inhaltstyp“: „Anwendung/json“
      }
      ...
    }
  })
   // Einen Anforderungs-Interceptor hinzufügen (etwas tun, bevor die Anforderung gesendet wird)
  Instanz.Interceptors.Request.use((Konfiguration) => {
      //Sie können eine Funktion hinzufügen, um den Ladeeffekt zu öffnen loading.open()  
      //Wenn das Token vorhanden ist, fügen Sie es dem Anforderungsheader-Token hinzu && (config.headers.Authorization = Token)
     // Filter null undefiniert '' Funktion in Anforderungsparametern cleanObject()
      Konfiguration zurückgeben
  })
  // Einen Antwort-Interceptor hinzufügen (etwas mit den Antwortdaten machen)
  Instanz.Interceptors.Response.use((Antwort) => {
   //Sie können eine Funktion hinzufügen, um den Ladeeffekt zu schließen loading.close()  
      //Dekonstruieren Sie die zurückgegebenen Ergebnisdaten const res = response.data
      //Beurteile den benutzerdefinierten Code und gib die erfolgreichen Daten zurück const validateStatus = /^(2|3)\d{2}$/ //Ein Code, der mit 2 oder 3 beginnt, wird als erfolgreiche Anfrage betrachtet, if (validateStatus.test(res.code)) {
        Rückgabewert
      }
      //Beurteilen Sie den fehlgeschlagenen Code und geben Sie Eingabeaufforderungen usw. aus. if (res.code === 401) {
        Nachricht.Fehler(res.msg)
      } anders {
        Nachricht.Warnung(res.msg)
      }
      gibt Promise.reject(res) zurück
      },
      (Fehler) => {
      loading.close() //Sie können eine Funktion hinzufügen, um den Ladeeffekt zu schließen, if (error.response.status === 401) {
        message.error('Token abgelaufen, bitte erneut anmelden!')
        removeStorageToken()
        setzeTimeout(() => {
          window.location.href = "/login"
        }, 2000)
      } anders {
        wenn (!window.navigator.onLine) {
          message.warning('Netzwerkanomalie, bitte prüfen Sie, ob die Netzwerkverbindung normal ist.')
        } sonst wenn (Fehlercode === 'ECONNABORTED') {
          message.warning('Anforderungs-Timeout')
        } anders {
          message.warning('Serverstörung, bitte kontaktieren Sie den Administrator')
        }
      }
      return Promise.reject(error) // Gibt den Fehler an die entsprechende Seite zurück}
      )
  
  Rückgabeinstanz
}

Zusammenfassen

Dies ist das Ende dieses Artikels über die Kapselung von Axios in Projekten. Weitere Informationen zur Kapselung von Axios in verwandten Projekten 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 Vue 2.0-Kapselungs-Axios-Notizen
  • Beispielcode mit Axios und Kapselung in Vue
  • 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
  • Kapselungsimplementierung von Axios unter Vue+TS
  • Detaillierte Erklärung des Kapselungsbeispiels von Axios in Vue

<<:  Detailliertes Beispiel einer MySQL-Unterabfrage

>>:  In Linux gibt es keinen Make-Befehl (make: *** Kein Ziel angegeben und keine Makefile- oder Make-Befehlsinstallationsmethode gefunden)

Artikel empfehlen

Farbverlaufseffekt im HTML-Hintergrund durch CSS-Stil erreicht

Screenshots der Effekte: Implementierungscode: Cod...

Eine kurze Analyse von MySQL-Sperren und -Transaktionen

MySQL selbst wurde auf Basis des Dateisystems ent...

JavaScript imitiert den Jingdong-Lupeneffekt

In diesem Artikel wird der spezifische Code für J...

Zusammenfassung der gebräuchlichen Buchstaben in Unicode

Die meisten der ersten Computer konnten nur ASCII...

So speichern Sie „false“ oder „true“ in MySQL

Boolescher MySQL-Wert, speichert „false“ oder „tr...

So optimieren Sie die MySQL-Abfragegeschwindigkeit

In den vorherigen Kapiteln haben wir die Auswahl ...

7 Möglichkeiten zum Schreiben einer Vue v-for-Schleife

Inhaltsverzeichnis 1. Verwenden Sie in der v-for-...

Automatische Sicherung der MySQL-Datenbank per Shell-Skript

Automatische Sicherung der MySQL-Datenbank per Sh...

Lösung zur Codeaufteilung im Vue-Projekt

Inhaltsverzeichnis Hintergrund Zweck Vor der Spal...

Fehlereinfügungsanalyse der Funktion „updatexml()“ von MySQL

Verstehen Sie zunächst die Funktion updatexml() U...

Tastenkombinationsvorgang für SQL Server-Kommentare

Batchkommentare in SQL Server Batch-Annotation St...