VorwortBeim 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-KapselungDie 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. VerpackungsideenWir 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ätKonfigurationen 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-Instanzkonfiguration1. Definieren Sie einige allgemeine KonfigurationenBaseUrl festlegen
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
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.
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.
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 AnforderungsschnittstellenmethodenIm 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 } ZusammenfassenDies 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:
|
<<: Detailliertes Beispiel einer MySQL-Unterabfrage
Screenshots der Effekte: Implementierungscode: Cod...
bei um + Zeit um 17:23 at> touch /mnt/file{1.....
MySQL selbst wurde auf Basis des Dateisystems ent...
In diesem Artikel wird der spezifische Code für J...
Die meisten der ersten Computer konnten nur ASCII...
Boolescher MySQL-Wert, speichert „false“ oder „tr...
In den vorherigen Kapiteln haben wir die Auswahl ...
Programme in Docker-Containern müssen häufig auf ...
Inhaltsverzeichnis 1. Verwenden Sie in der v-for-...
Automatische Sicherung der MySQL-Datenbank per Sh...
1. MS SQL SERVER 2005 --1. Löschen Sie das Protok...
Inhaltsverzeichnis Hintergrund Zweck Vor der Spal...
1. Bearbeiten Sie die PAM-Konfigurationsdatei sud...
Verstehen Sie zunächst die Funktion updatexml() U...
Batchkommentare in SQL Server Batch-Annotation St...