Detaillierte Erläuterung des Schnittstellenanforderungsmanagements basierend auf Typescript und Axios

Detaillierte Erläuterung des Schnittstellenanforderungsmanagements basierend auf Typescript und Axios

Dieser Artikel stellt hauptsächlich die Schnittstellenanforderungskapselung basierend auf TS und AXIOS vor

Ideen

Abfangen von Anfragen

  • Fügen Sie dem Anforderungsheader einige Parameter hinzu, z. B. Token, UID usw.
  • Ermitteln Sie den Anmeldestatus des Benutzers. Wenn Sie nicht angemeldet sind, springen Sie direkt zur Anmeldung
  • Verarbeiten Sie die Anforderungsdaten und konvertieren Sie das Datenformat der zu sendenden Anforderung, json→urlencoded (optional).

Antwortabfangen

  • Bestimmen Sie den Geschäftsstatuscode der Backend-Antwort und führen Sie verschiedene Verarbeitungsvorgänge durch
    • Wenn beispielsweise der Anmeldestatus des Benutzers abläuft, springen Sie direkt zum Login
    • Einheitliche Fehlerberichterstattung

Schreiben Sie zuerst den Routinecode:

importiere Axios, {
    AxiosInstance,
    AxiosResponse,
    AxiosRequestConfig,
    AxiosError
} von 'axios'
exportiere standardmäßige abstrakte Klasse HttpClient {
    geschützte schreibgeschützte Instanz: AxiosInstance

    öffentlicher Konstruktor(baseURL = '/api', timeout = 1000 * 120) {
        diese.Instanz = axios.create({
            Basis-URL,
            Time-out
        })
        // 1. Interceptor anfordern this._initializeRequestInterceptor()
        // 2. Antwort-Interceptor this._initializeResponseInterceptor()
    }
    private _initializeRequestInterceptor = () => {
        diese.Instanz.Interceptors.Anfrage.Verwenden(
            diese._handleRequest,
            this._handleError
        )
    }
    private _handleRequest = (Konfiguration: AxiosRequestConfig) => {}
   
    private _initializeResponseInterceptor = () => {
        diese.Instanz.Interceptors.Response.Verwendung(
            diese._handleResponse,
            this._handleError
        )
    }
    private _handleResponse = (Antwort: AxiosResponse) => {}
    geschützt _handleError = (Fehler: AxiosError) => Promise.reject(Fehler)
}

Um den obigen Code kurz zu erklären: Wir haben eine HttpClient-Klasse für die Anforderungsschnittstelle erstellt, die Basis-URL und das Timeout im Konstruktor definiert und die Anforderungs- und Antwortabfangmethode definiert.

An dieser Stelle läuft der Prozess zum Initiieren einer Schnittstelle wie folgt ab:

  1. Rufen Sie vor dem Senden der Anforderung die Anforderungsabfangfunktion auf
  2. Sendeschnittstelle, Netzwerkanfrage erscheint
  3. Schnittstellenantwort, Abfangen von Anrufantworten
  4. Reagieren Sie auf das Front-End-Programm und führen Sie die entsprechende Logik aus

Abfangen von Anfragen

Beginnen wir mit der detaillierten Logik. Wenn Sie eine Interception anfordern, können Sie Folgendes tun:

  1. Fügen Sie dem Anforderungsheader einige Parameter hinzu, z. B. Token, UID usw.
  2. Ermitteln Sie den Anmeldestatus des Benutzers. Wenn Sie nicht angemeldet sind, springen Sie direkt zur Anmeldung
  3. Verarbeiten Sie die Anforderungsdaten und konvertieren Sie das Datenformat der zu sendenden Anforderung, json→urlencoded (optional).
     private _handleRequest = (Konfiguration: AxiosRequestConfig) => {
        //1. Fügen Sie einen benutzerdefinierten Anforderungsheader hinzu: config.headers['Authorization'] = 'my token'
        config.headers['mobile'] = 'mein Handy'
        // 2. Bestimmen Sie, ob Sie sich anmelden möchten (bestimmen Sie, ob ein Token vorhanden ist)
        
        //3. Datenformat konvertieren config.data = qs.stringify(config.data)
        Konfiguration zurückgeben
    }

Antwortabfangen

Nach Erhalt der Antwort läuft der Vorgang wie folgt ab:

  • Bestimmen Sie den Geschäftsstatuscode der Backend-Antwort und führen Sie verschiedene Verarbeitungsvorgänge durch
    • Wenn der Anmeldestatus des Benutzers abläuft, springen Sie direkt zum Login
    • Einheitliche Fehlerberichterstattung
  • Token speichern
 // Antwort-Interceptor private _handleResponse = (Antwort: AxiosResponse) => {
        const { Daten, Header } = Antwort

        //1.--Verarbeiten Sie das Antworttoken und speichern Sie das Token
        const token = headers['autorisierung']
        wenn (Token) {
            dies._saveToken(Token)
        }
       
        //2. --Verarbeite den Antwortcode. Hier versuche es mit einem Catch. Wenn einige Backend-Schnittstellen keinen Code zurückgeben, kehre direkt zu try { zurück.
            const code = daten.code,
            Nachricht = data.desc || data.msg
            const isSucceed = this._handleResCode(Code, Nachricht, URL)
            wenn (ist erfolgreich) {
                returniere Promise.resolve(Daten)
            } anders {
                returniere Promise.reject(Nachricht)
            }
        } Fehler abfangen {
            returniere Promise.resolve(Daten)
        }
       
    }
    //Token speichern
    private _saveToken(Token: Zeichenfolge) {
        const USER = getModule(BenutzerModul)
        USER.setToken(Token)
    }
    private _handleResCode(Code: Nummer, Nachricht: Zeichenfolge, URL: Zeichenfolge) {
        wenn (Code === 0) {
            //Anfrage erfolgreich return true
        } sonst wenn (Code===4000) {
            // Token läuft ab, springe zurück zur Anmeldeoberfläche Vue.prototype.$message.error('Identitätsinformationen abgelaufen, bitte melden Sie sich erneut an')
            router.push({ Name: 'login' })
            return false
        } anders {
            // In anderen Fällen sind alle Eingabeaufforderungen Nachrichteninformationen Vue.prototype.$message.error(message)
            return false
        }
    }

Definieren Sie die Anforderung mit httpClient.ts

Es wird empfohlen, anforderungsbezogene Dateien wie folgt im Verzeichnis @/api zu definieren

httpClient.ts
Benutzer.ts
uti.ts

Definieren Sie die Anforderung in der entsprechenden Datei.

  1. Alle Anforderungsklassen müssen die HttpClient-Klasse erben. HttpClient führt einige einheitliche Abfang- und Verarbeitungsvorgänge für Anforderungen und Antworten durch.
  2. Die Daten der Anfrageantwort müssen einen Typ aufweisen, der in der Datei @/types/xxx definiert ist. Ein Modul entspricht einer Datei. Nur wenn der Typ angegeben ist, gibt es Codehinweise
importiere HttpClient aus './HttpClient'
importiere { AlarmItemType } aus '../types/test'
importiere { BaseResType } von '../types/index'

Klasse UtilApi erweitert HttpClient {
   //Beispielsweise wird die vom Hintergrund zurückgegebene Antwort res={code:xxx,data:xxx,token:xxx,desc:xxx}
    //Zuerst müssen Sie den Typ von res.data definieren, der der erste Parameter von get ist, AlarmItemType
    //Dann müssen Sie den Typ der gesamten Antwort definieren, nämlich BaseResType<AlarmItemType>
    public getAlarmById = (id: Zeichenfolge) =>
        this.instance.get<AlarmItemType, BaseResType<AlarmItemType>>(
            `/realtime/alarms/queryByAlarmId/${id}`
        )
}

exportiere const UTIL_API = neue UtilApi()

Anfordern einer Schnittstelle in einer Komponente

Geben Sie das Schlüsselwort des Anforderungsmoduls in die Komponente ein, an die Sie eine Anforderung senden müssen, z. B. USER_API. Wenn das TypeScript Importer-Plugin installiert ist, wird eine entsprechende Eingabeaufforderung zum Importieren des Moduls angezeigt. Drücken Sie zu diesem Zeitpunkt die Eingabetaste, um das entsprechende Modul zu importieren.

<Vorlage>
    <section>Anforderungsdaten:{{ alarmData }}</section>
</Vorlage>

<script lang="ts">
importiere { UTIL_API } von '@/api/utilApi'
importiere { Vue, Komponente } von 'vue-property-decorator'
@Komponente({
    Komponenten: {}
})
exportiere Standardklasse TestRequest erweitert Vue {
    alarmData = {}
    async getAlarmData() {
        const res = warte auf UTIL_API.getAlarmById('alarmIdc7e9bd47')
        wenn (res.code == 0) {
            this.$message.success('Anfrage erfolgreich')
            diese.alarmData = res.data
        }
    }
    montiert() {
        dies.getAlarmData()
    }
}
</Skript>
<style lang="scss" scoped></style>

Zusammenfassen

Dies ist das Ende dieses Artikels zur Verwaltung von Schnittstellenanforderungen basierend auf Typescript und Axios. Weitere verwandte Inhalte zu Schnittstellenanforderungen von Typescript und 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:
  • Fallbeispiel zur TypeScript-Schnittstellendefinition
  • Generische TypeScript-Verwendung und generische Schnittstellenkombination
  • Einführung in TypeScript-Schnittstellen
  • TypeScript-Einführung - Schnittstelle
  • Detaillierte Erklärung der Schnittstellen in TypeScript
  • TypeScript Core Foundation-Schnittstelle

<<:  Grafisches Tutorial zur Installation von VMware15.5 und Ubuntu20.04

>>:  Ubuntu 20.04 stellt eine Verbindung zu WLAN her (2 Methoden)

Artikel empfehlen

Hinweise zum Upgrade auf mysql-connector-java8.0.27

Kürzlich wurde bei einem Online-Sicherheitsscan e...

Probleme und Lösungen bei der Installation von Mininet auf Ubuntu 16.04.4LTS

Mininet Mininet ist eine leichtgewichtige, softwa...

js implementiert einen einfachen Rechner

Verwenden Sie natives JS, um einen einfachen Rech...

Vue verwendet Regeln zur Implementierung der Formularfeldvalidierung

Es gibt viele Möglichkeiten, Formularfelder in Vu...

So verwenden Sie das Realip-Modul im Nginx-Grundlagenlernen

Vorwort Es gibt zwei Arten von Nginx-Modulen: off...

Native JS-Implementierung der Lupenkomponente

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der MySQL-Datenmigration

Inhaltsverzeichnis Vorwort: 1. Über die Datenmigr...

Detaillierte Erläuterung der drei Möglichkeiten zum Importieren von CSS-Dateien

Es gibt drei Möglichkeiten, CSS einzuführen: Inli...

So erhalten/berechnen Sie den Offset eines Seitenelements mit JavaScript

Frage Durch Klicken auf ein Steuerelement wird ei...

Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Dieser Artikel stellt kurz den Prozess der Einric...

Webdesign: Die genaue Platzierung und Verwendung massiver Materialien

Durch dreimaliges Auswendiglernen können Sie sich...