So verwenden Sie Axios-Anfragen im Vue-Projekt

So verwenden Sie Axios-Anfragen im Vue-Projekt

In tatsächlichen Projekten ist die Dateninteraktion mit dem Hintergrund unverzichtbar. Normalerweise verwende ich die Axios-Bibliothek, daher basieren die folgenden Beispiele auch auf Axios.

1. Installation

Der erste Schritt besteht darin, axios mit npm zu installieren. Das geht ganz einfach: npm install axios

2. Es gibt kein Problem mit der Kapselung

Wenn im Projekt keine gekapselte Schnittstelle vorhanden ist, können Sie überall in der Datei die folgenden Methoden zum Aufrufen der Schnittstelle sehen:

dies.$axios.post("/user/add", {
    Parameter: {
        Name: dieser.Name,
        Alter: dieses.Alter
    }
})
.then(res => {
    Konsole.log(res)
})
.then(err => {
    Konsole.log(res)
})

Es ist nicht unmöglich, es auf diese Weise zu schreiben, aber es gibt einige Mängel. Die URLs der Schnittstellenanforderungen sind in verschiedenen Dateien verstreut. Wenn Sie bei erfolgreichem oder fehlgeschlagenem Schnittstellenaufruf eine Verarbeitung durchführen müssen, müssen Sie jede Datei ändern. Daher werden diese Schnittstellenanforderungen zentral zusammengeführt. Wenn Anpassungen vorgenommen werden, können Sie die Änderungen direkt in der zentralisierten Datei finden, ohne jede Datei erneut überprüfen zu müssen.

3. Erstellen Sie eine Datei

Erstellen Sie zunächst im src-Verzeichnis des Projekts eine neue Ordner- und Dateiverzeichnisstruktur wie folgt:

├── src Quellcodeverzeichnis

│ ├── API-Schnittstellendateiverzeichnis

│ │ ├── login.api.js Anmeldemodul Schnittstelle API

│ │ └── user.api.js Benutzermodul-Schnittstellen-API

│ ├── Dienstanforderungsbezogenes Dateiverzeichnis

│ │ ├── address.js Adresskonfigurationsdatei anfordern

│ │ └── request.js Axios-Kapselung, Anforderungsabfangen, Antwortcodeverarbeitung und andere Vorgänge

Die Aufteilung der API-Schnittstellendateimodule kann auf Ihrem tatsächlichen Projekt, Ihrer Geschäftsfunktion, Ihrer Geschäftslogik oder anderen Formen basieren.

4. Adresskonfiguration anfordern

Im Allgemeinen haben wir mehrere Projektumgebungen und mindestens eine hat eine Entwicklungsumgebung und eine Produktionsumgebung. Normalerweise gibt es in der Entwicklungsumgebung und im Produktionsmodus unterschiedliche Basis-URLs, daher müssen wir je nach Umgebung zwischen unterschiedlichen Basis-URLs wechseln.

Datei address.js:

// Wechseln Sie zwischen verschiedenen Basis-URLs gemäß process.env.NODE_ENV
const isPro = process.env.NODE_ENV === 'Produktion'
​
modul.exporte = {
    // 'apis': Proxy-Basis-URL, die vom Proxy in vue.config.js festgelegt wurde: isPro ? 'http://192.168.100.120/ceds' : '/apis'
}

5. Axios-Konfiguration, Festlegen des Anforderungsheaders und der Antwortcodeverarbeitung

Die allgemeine Idee besteht darin, eine Anforderungsklasse zu kapseln, die Anforderungsmethoden wie get und post enthält. Diese Anforderungsmethoden rufen die Anforderungsmethode auf, die die ursprüngliche Axios-Anforderung über die verschiedenen übergebenen Parameter aufruft und dann ein Promise zurückgibt.

Datei request.js:

Axios von „Axios“ importieren
Qs aus „qs“ importieren
Vue von „vue“ importieren
import { getToken } from '@Utils/session.utils' // Token-Datei speichern und abrufen Importadresse von './address' // Adresse anfordern
Klasse Anfrage {
    Konstruktor () {
        // Eine Axios-Instanz erstellen this._axios = axios.create({
            baseURL: Adresse.baseURL,
            Timeout: 1000 * 5, // Anforderungs-Timeout-Header: {}
        })
        //Abfangen anfordern this._axios.interceptors.request.use(
            Konfiguration => {
                const requestHeader = {
                    'X-Angefordert-Mit': 'XMLHttpRequest',
                    'Inhaltstyp': 'application/json; Zeichensatz=UTF-8',
                    'Zugriffskontrolle-Origin zulassen': '*',
                    token: getToken() // Token zum Anfrageheader hinzufügen
                }
                config.headers = Objekt.assign(config.headers, requestHeader)
                Konfiguration zurückgeben
            },
            Fehler => {
                Promise.reject(Fehler)
            }
        )
    }
     
    // Bestimmen Sie anhand der Anforderungsmethode, ob die Parameter in der Abfrage oder im Textkörper platziert werden sollen.
    // Der intuitivste Unterschied besteht beispielsweise darin, dass GET-Anfragen Parameter in der URL enthalten, während POST Parameter über den Anforderungstext in den Text einfügt, sodass die Parameterformate beim Senden unterschiedlich sind // Im Folgenden sind die vier Parameterformate aufgeführt, die ich im Allgemeinen für Anforderungsmethoden verwende. Sie können sie selbst anpassen /**
      * Senden Sie eine Get-Anfrage * @param {String} URL-Adresse * @param {Object} Abfrageabfrageparameter * @return JSON-Daten */
    erhalte (URL, Abfrage = {}) {
        gib dies zurück._request('get')(url, {
            ...Abfrage
        })
    }
    /**
      * Sendeanfrage * @param {String} URL-Adresse * @param {Object} Body-Abfrageparameter * @return JSON-Daten */
    post(url, body = {}, headers) {
        Daten lassen;
        wenn (dies.isFormData(body)) {
            Daten = Text
        } sonst wenn(Array.isArray(body)) {
            Daten = Text
        } anders {
            Daten = { ...Textkörper }
        }
        gib dies zurück._request('post')(URL, Header)(URL, Daten);
    }
    setze (URL, Text = {}) {
        gib dies zurück._request('put')(url, {
            ...Körper
        });
    }
    löschen(URL, Text = {}) {
        gib dies zurück._request('löschen')(url, {
            ...Körper
        });
    }
​
    isFormData = v => {
        returniere Object.prototype.toString.call(v) === '[Objekt FormData]'
    }
​
​
    /**
      * Anforderungsheader festlegen * @param {Object} Header Anforderungsheader */
    setHeaders(header) {
        Objekt.Schlüssel(Header).fürJeden(Schlüssel => {
            this._axios.defaults.headers[Schlüssel] = Header[Schlüssel]
        })
    }
​
    // Anfrageheader verarbeiten
    handleHeaders() {
        const headers = {}
        Header['XMIME-TYPE'] = '3'
        Header['Inhaltstyp'] = 'Anwendung/json; Zeichensatz=UTF-8'
        Rückgabeheader
    }
​
    /**
      * Anfrage senden * @param {String} Methode Anfragemethodentyp * @param Header
      * @returns {Funktion(*=, *=):Promise<unbekannt>}
      * @Privat
      */
    _request (Methode, Header) {
        this.setHeaders(this.handleHeaders()) // Einen einheitlichen Anforderungsheader festlegen if (headers) {
            this.setHeaders(headers) //Benutzerdefinierte Anforderungsheader}
         
        return (URL, Daten, Timeout) => {
            const konfiguration = {
                URL (URL = URL = URL),
                Verfahren,
                Zeitüberschreitung: Zeitüberschreitung || this._axios.defaults.timeout
            } //Anforderungskonfiguration erstellen
​
            // Bestimmen Sie den Anfragetyp get post
            const paramType = ['get', 'delete'].indexOf(Methode) !== -1 ? 'Params' : 'Daten'
            config[paramType] = Daten
            //Parameterserialisierung config.paramsSerializer = params => {
                Geben Sie Qs.stringify(params, { arrayFormat: 'wiederholen' }) ein.
            }
             
            returniere neues Promise((lösen, ablehnen) => {
                // Senden Sie die eigentliche Anfrage, überprüfen Sie die Berechtigungen, prüfen Sie 404 und andere Status
                dies._axios
                    .request(Konfiguration)
                    .dann(Antwort => {
                        wenn (dieser.handleSuccessStatus(response.data.code, response.data)) {
                            wenn (Antwort.header['Inhaltstyp'] !== 'Text/Plain; Zeichensatz=urf-8') {
                            lösen(
                                    // Sekundärverpackung des Antwortergebnisses Object.assign(
                                      {
                                          Erfolg: Zahl(Antwort.Daten.Code) === 200,
                                            Daten: Antwort.Daten.Daten,
                                            Nachricht: Antwort.Daten.Nachricht
                                        },
                                       Antwortdaten
                                    )
                                ) // Verarbeite das zurückgegebene Ergebnis } else {
                                auflösen(Antwort.Daten)
                            }
                        }
                    }, Antwort => {
                        // Fehlercode verarbeiten if(response.response) {
                            const statusCode = antwort.response.status
                            this.handleErrorStatus(statusCode)
                        } anders {
                          Vue.prototype.$message.error(Antwort.Nachricht)
                        }
                        ablehnen(Antwort)
                    })
                    .catch(err => {
                        ablehnen (Fehler)
                    })
                })
            }
        }
    }
​
    // Die Anforderung ist erfolgreich und der Fehlercode wird zurückgegeben // Der spezifische Statuscode stimmt mit dem Back-End-Entwickler überein, und dann wird die entsprechende Eingabeaufforderung entsprechend dem Statuscode angezeigt // Das Folgende ist meine Operation im Projekt. Sie können sie selbst anpassen und erweitern handleSuccessStatus (Code, Daten) {
        let result = ''
        let flag = false
        Schalter (Code) {
            Fall '20007':
                Ergebnis = ‚Das sekundäre Authentifizierungskennwort wurde nicht gefunden!‘ '
                Flagge = wahr
                brechen
            Fall '20008':
                Ergebnis = ,,Ihr sekundäres Authentifizierungskennwort wurde nicht geändert, bitte ändern Sie es zuerst! '
                Flagge = wahr
                brechen
            Fall '20009':
                Ergebnis = ,,Sie haben die sekundäre Authentifizierung noch nicht aktiviert, bitte kontaktieren Sie den Administrator! '
                Flagge = wahr
                brechen
            Fall '90001':
                Ergebnis = 'Bitte geben Sie das sekundäre Authentifizierungskennwort ein! '
                Flagge = wahr
                brechen
            Fall '90002':
                Ergebnis = 'Keine Betriebserlaubnis! '
                Flagge = wahr
                brechen
            Standard:
                brechen
        }
​
        // Benachrichtigen // Die Methode $message ist die Eingabeaufforderungskomponente in element-ui, die ich auf Anfrage eingeführt habe. Sie können sie durch Ihre eigene Eingabeaufforderungskomponente ersetzen, wenn (Ergebnis) {
            Vue.prototype.$message.error(Ergebnis)
        }
        Flagge zurückgeben
    }
    //Erhalte die Fehlermeldung basierend auf dem Fehlercode handleErrorStatus (statusCode) {
        let errorMsg = ''
        wenn (Statuscode === 500) {
            errorMsg = 'Datenanforderung fehlgeschlagen, bitte kontaktieren Sie den Administrator! '
        } sonst wenn (Statuscode === 404) {
            errorMsg = ,,Fehler bei der Anforderungsadresse! '
        } sonst wenn (Statuscode === 402) {
            errorMsg = 'Sie haben derzeit keine Berechtigung diese Daten zu verarbeiten! '
        } anders {
            errorMsg = ,,Anforderungsfehler! '
        }
        // Benachrichtigen Sie Vue.prototype.$message.error(errorMsg)
    }
}
​
Exportieren Sie standardmäßig eine neue Anfrage ()

6. Nutzung

In der Schnittstellenverwaltungsdatei können wir die oben gekapselte Request-Klasse aufrufen und die entsprechenden Parameter übergeben.

Datei user.api.js:

importiere http von '../services/request'
​
/**
 * @description Benutzerliste abrufen* @param {*} params Parameter der Anforderungsschnittstelle*/
// Die hier definierte Methode reqUserList ruft die Methode get in unserer gekapselten Anfrage auf. Der erste Parameter der Methode get ist die Anfrageadresse, der zweite Parameter der Abfrageparameter export const reqUserList = params => http.get('/user/list', params)

Führen Sie in der aufgerufenen .vue-Datei diese Methode ein und übergeben Sie die Parameter.

importiere { reqUserList } von '@Apis/user.api' // API importieren
​
Standard exportieren {
    Name: 'Benutzerliste',
    ... ...
    erstellt() {
     
    },
    Methoden: {
        async getUsers() {
            //Rufen Sie die API-Schnittstelle auf und übergeben Sie die Parameter const res = await reqUserList({
                Seite: 1,
                Größe: 10
            })
            console.log(res) // Das Antwortergebnis abrufen}
    }
}

Damit sind die Kapselung und die grundsätzliche Nutzung der Schnittstelle abgeschlossen.

PS: Die oben genannten Dateinamen, Ordnernamen, Methodennamen, Pfade usw. habe ich alle selbst erhalten. Sie können sie entsprechend Ihrem eigenen Codierstil anpassen.

Oben finden Sie Einzelheiten zur Verwendung von Axios-Anfragen in Vue-Projekten. Weitere Informationen zur Verwendung von Axios in Vue-Projekten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Verwenden Sie Axios im Vue-Projekt, um Bilder und andere Dateivorgänge hochzuladen
  • Detaillierte Erklärung zur Verwendung von Axios im Vue-Projekt
  • Verwenden Sie im Vue-Projekt die domänenübergreifende Verarbeitung von Axios
  • Beispielcode für die Kapselung der Axios-Anforderungsnetzwerkschnittstelle im Vue-Projekt
  • Vue-Projektpraxis: Elegante Nutzung von Axios
  • Drei Minuten, um schnell die grundlegende Verwendung von Axios in Vue-Projekten zu erlernen (empfohlen!)

<<:  Detaillierte Erklärung zur Konfiguration des sekundären Domänennamens auf einem Apache-Server in einer Linux-Umgebung

>>:  Detaillierte Erklärung zum Aktivieren des https-Dienstes in Apache unter Linux

Artikel empfehlen

So ändern Sie das Root-Benutzerkennwort in MySQL 8.0.16, WinX64 und Linux

Grundlegende Vorgänge wie die Verbindung zur Date...

Lösung, wenn der Docker-Container nicht auf den Host-Port zugreifen kann

Ich bin kürzlich bei der Arbeit auf ein Problem g...

Analyse mehrerer Situationen, in denen der MySQL-Index fehlschlägt

1. Prinzip des besten linken Präfixes – Wenn mehr...

So erhalten/berechnen Sie den Offset eines Seitenelements mit JavaScript

Frage Durch Klicken auf ein Steuerelement wird ei...

Probleme beim Springen auf HTML-Seiten und bei der Parameterübertragung

HTML-Seitensprung: Fenster.öffnen(URL, "&quo...

Eine kurze Diskussion über Browserkompatibilitätsprobleme in JavaScript

Die Browserkompatibilität ist der wichtigste Teil...

Über Tomcat kombiniert mit Atomikos zur Implementierung von JTA

Vor Kurzem hat das Projekt die Umgebung gewechsel...

Einfache Implementierung zum Ausblenden der Bildlaufleiste in HTML

1. HTML-Tags mit Attributen XML/HTML-CodeInhalt i...

Häufige Tomcat-Ausnahmen und Lösungscodebeispiele

Das Unternehmensprojekt wurde in Java entwickelt ...

So aktualisieren Sie den Kernel in Deepin Linux manuell

deepin und Ubuntu sind beides auf debian basieren...

Die Tücken der automatischen Inkrementierung numerischer MySQL-Typen

Beim Entwurf von Tabellenstrukturen gehören numer...

CentOS 7 SSHD ändern | Root-Login und SSHD-Port-Skriptdefinition verbieten

1. Erstellen Sie einen neuen Benutzer wwweee000 [...