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

CSS zum Erzielen des Skeleton Screen-Effekts

Beim Laden von Netzwerkdaten wird zur Verbesserun...

Detaillierte Erläuterung des verschachtelten Routings im Vue-Router

Inhaltsverzeichnis Schritt 1. Konfigurieren Sie R...

Detaillierte Erläuterung der Kubernetes-Pod-Orchestrierung und des Lebenszyklus

Inhaltsverzeichnis K8S Master Grundlegende Archit...

Welche Schleife ist in JavaScript die schnellste?

Wenn wir wissen, welche For-Schleife oder welcher...

js, um den Effekt eines Lichtschalters zu erzielen

In diesem Artikelbeispiel wird der spezifische Co...

XHTML-Erste-Schritte-Tutorial: Verwenden des Frame-Tags

<br />Durch die Frame-Struktur ist die gleic...

30 Minuten, um Ihnen ein umfassendes Verständnis von React Hooks zu vermitteln

Inhaltsverzeichnis Überblick 1. useState 1.1 Drei...

MySQL Flush-List und Flushing-Mechanismus für Dirty Pages

1. Überprüfung Der Pufferpool wird nach dem Start...

HTML-Basis-URL-Tag

Seine Funktion besteht darin, einen globalen Stil ...

W3C Tutorial (12): W3C Soap Aktivität

Bei Webdiensten geht es um die Kommunikation zwis...