VorwortAls 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.jsaxios.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.jsIn 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 SchnittstelleAn 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. ZusammenfassenDies 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:
|
<<: Analyse der MySQL-Ansichtsfunktionen und Anwendungsbeispiele
MySQL verarbeitet doppelte Daten Einige MySQL-Tab...
Dieser Artikel installiert die Google-Eingabemeth...
Vererbung von Kompositionen Kombinationsvererbung...
1. Docker Compose Übersicht Compose ist ein Tool ...
Lassen Sie mich zunächst vorstellen, wie Sie PHP ...
Hintergrund Kürzlich fragten mich einige Freunde,...
Der <base>-Tag gibt die Standardadresse oder...
Als ich kürzlich Docker lernte, stellte ich fest,...
Die Sache ist: Jeder kennt „Speicherlecks“. Es gi...
1. Suchen Sie zunächst die Datendatei auf dem Mig...
Allgemeiner Handy-Stil: @media alle und (Ausricht...
1. Vorbereitung Middleware: Tomcat, Redis, Nginx ...
Inhaltsverzeichnis Hintergrund Lösung 1 Ideen: Co...
<br /> CSS-Syntax für Tabellenränder Zu den ...
Durch dreimaliges Auswendiglernen können Sie sich...