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

vue3+ts+EsLint+Prettier Standardcode-Implementierung

Inhaltsverzeichnis verwenden Verwendung von EsLin...

So lösen Sie das Problem, das Root-Passwort von Mysql auf dem Mac zu vergessen

Ich habe MySQL auf meinem Computer längere Zeit n...

So erstellen Sie ein React-Projekt mit Vite

Inhaltsverzeichnis Vorwort Erstellen Sie ein Vite...

Fehler beim reduzierten Tabellenzeilenelement

Nehmen wir ein Beispiel: Der Code ist sehr einfach...

Beispiele für dl-, dt- und dd-Listenbezeichnungen

Die Tags dd und dt werden für Listen verwendet. N...

6 ungewöhnliche HTML-Tags

Zuerst: <abbr> oder <acronym> Diese be...

Implementierung des iview-Berechtigungsmanagements

Inhaltsverzeichnis iview-admin2.0 integrierte Ber...

Tutorial zu HTML-Tabellen-Tags (3): Breiten- und Höhenattribute WIDTH, HEIGHT

Standardmäßig werden Breite und Höhe der Tabelle ...

Analyse der Schwierigkeiten im Hot-Standby der MySQL-Datenbank

Ich habe Ihnen zuvor die Konfigurationsmethode fü...

Nginx-Inhaltscache und allgemeine Parameterkonfigurationsdetails

Anwendungsszenarien: Die Seiten des Projekts müss...

Vue-Komponente kapselt Beispielcode zum Hochladen von Bildern und Videos

Laden Sie zuerst die Abhängigkeiten herunter: cnp...

So führen Sie py-Dateien direkt unter Linux aus

1. Erstellen Sie zuerst die Datei (wechseln Sie p...

JS implementiert ein zufälliges Namensaufrufsystem

Verwenden Sie JS, um ein zufälliges Namensaufrufs...