VorwortIm React-Projekt verwenden wir normalerweise die Axios-Bibliothek, um mit dem Hintergrund zu interagieren und Daten abzurufen. Es handelt sich um eine versprechenbasierte HTTP-Bibliothek, die im Browser und in node.js ausgeführt werden kann. Es verfügt über viele hervorragende Funktionen, wie das Abfangen von Anfragen und Antworten, das Abbrechen von Anfragen, die Konvertierung von JSON und den Schutz vor XSRF auf der Clientseite. Wenn Sie Axios noch nicht kennen, können Sie zur Axios-Dokumentation wechseln. Installieren//Mit npm installieren npm install axios; //Verwenden Sie yarn, um yarn add axios zu installieren EinführungErstellen Sie im Stammverzeichnis des Projekts einen Anforderungsordner und erstellen Sie darin dann eine Datei „index.js“ und eine „api.js“. Die Datei index.js wird zum Kapseln unserer Axios verwendet und api.js dient zur einheitlichen Verwaltung unserer Schnittstellen. //Axios in index.js einführen importiere Axios von „Axios“; //Führen Sie das QS-Modul ein, um Post-Type-Daten zu serialisieren. Importieren Sie QS von „qs“. //Antds Nachrichtenaufforderungskomponente, Sie können sie entsprechend Ihrer eigenen UI-Komponente ändern. importiere {Nachricht} von 'antd' Umgebungen wechselnUnsere Projektumgebung kann eine Entwicklungsumgebung, eine Testumgebung und eine Produktionsumgebung umfassen. Wir verwenden die Umgebungsvariablen des Knotens, um sie an das URL-Präfix unserer Standardschnittstelle anzupassen. Hier wird die globale Variable process des Knotens benötigt, process.env.NODE_ENV kann unterscheiden, ob es sich um eine Entwicklungsumgebung oder eine Produktionsumgebung handelt. //Umgebungsvariablen speichern const isPrd = process.env.NODE_ENV == 'production'; //Unterscheiden Sie zwischen der Basis-URL der Entwicklungsumgebung und der Produktionsumgebung export const basciUrl = isPrd ? 'https://www.production.com' : 'http://www.development.com' Um zu verhindern, dass an anderer Stelle andere Ressourcen verwendet werden, wird hier die Basis-URL exportiert. Dabei ist zwischen Produktionsumgebung und Entwicklungsumgebung zu unterscheiden. Nach dem Import kann diese direkt verwendet werden. Abfangen von AnfragenWir können eine Anfrage abfangen, bevor wir sie senden. Warum müssen wir sie abfangen? Wozu fangen wir die Anfrage ab? Bei manchen Anfragen ist beispielsweise eine Anmeldung des Benutzers erforderlich, bevor er darauf zugreifen kann. Bei einer Post-Anfrage müssen wir die übermittelten Daten serialisieren. Zu diesem Zeitpunkt können wir die Anfrage vor dem Senden abfangen und die gewünschten Vorgänge ausführen. //Den Axios-Basispfad festlegen const service = axios.create({ baseURL: Basis-URL }) // Interceptor anfordern service.interceptors.request.use(config => { // Überprüfen Sie vor dem Senden jeder Anfrage, ob sich ein Token im lokalen Speicher befindet. Sie können hier auch Redux verwenden, um nur zu demonstrieren, wie Sie das Token lokal erhalten. // Falls vorhanden, füge das Token dem Header der http-Anfrage hinzu, damit das Backend deinen Login-Status anhand des Tokens ermitteln kann. // Auch wenn das Token lokal vorhanden ist, ist es möglich, dass das Token abgelaufen ist, daher muss der Rückgabestatus im Antwort-Interceptor ermittelt werden const token = window.localStorage.getItem('userToken') || window.sessionStorage.getItem('userToken'); //Jeder Anfrage ein Token hinzufügen config.data = Objekt.assign({}, config.data, { Zeichen: Zeichen, }) //Setze den Anforderungsheader config.headers = { „Inhaltstyp“: „Anwendung/x-www-form-urlencoded; Zeichensatz=utf-8“ } Konfigurationsdaten = QS.stringify(Konfigurationsdaten) Konfiguration zurückgeben }, Fehler => { Rückgabefehler; }) Lassen Sie uns hier über Token sprechen. Im Allgemeinen wird das Token des Benutzers nach Abschluss der Anmeldung lokal über localStorage oder sessionStorage gespeichert. Jedes Mal, wenn der Benutzer dann die Seite aufruft (d. h. in main.js), wird das Token zuerst aus dem lokalen Speicher gelesen. Wenn das Token vorhanden ist, bedeutet dies, dass sich der Benutzer angemeldet hat. Anschließend wird der Token-Status in Redux aktualisiert. Dann haben Sie bei jeder Anforderung der Schnittstelle das Token im Anforderungsheader dabei. Das Backend-Personal kann anhand des Tokens, den Sie dabei haben, feststellen, ob Ihr Login abgelaufen ist. Wenn Sie es nicht dabei haben, bedeutet dies, dass Sie sich nie angemeldet haben. Antwortabfangen// Antwort-Interceptor service.interceptors.response.use(response => { //Machen Sie unterschiedliche Dinge basierend auf dem zurückgegebenen Statuscode// Verhandeln Sie unbedingt mit den Backend-Entwicklern einen einheitlichen Fehlerstatuscode, wenn (response.code) { Schalter (Antwortcode) { Fall 200: Antwortdaten zurückgeben; Fall 401: //Nicht angemeldet bei der Verarbeitungsmethode „break“; Fall 403: //Methode zur Verarbeitung des Token-Ablaufs break; Standard: Nachricht.Fehler(Antwort.Daten.Nachricht) } } anders { Antwort zurückgeben; } }) //Exportieren Sie abschließend den gekapselten Axios-Export-Standarddienst Der Antwort-Interceptor ist leicht zu verstehen. Es sind die Daten, die der Server an uns zurückgibt, und wir können sie verarbeiten, bevor wir sie erhalten. Die obige Idee lautet beispielsweise: Wenn der vom Hintergrund zurückgegebene Statuscode 200 ist, werden die Daten normal zurückgegeben, andernfalls werden einige Fehler, die wir benötigen, entsprechend dem falschen Statuscodetyp verarbeitet. Die spezifischen Prozesse, die entsprechend dem zurückgegebenen Statuscode behandelt werden müssen, müssen mit den Hintergrundentwicklern ausgehandelt werden. Die obige Methode message.error() ist die von mir eingeführte Bibliotheks-Prompt-Komponente von antd. Sie müssen die Prompt-Komponente entsprechend Ihrer UI-Bibliothek verwenden. Einheitliche Verwaltung von APIsEine übersichtliche API ist wie eine Leiterplatte, die die gesamte Schaltung klar darstellt, egal wie komplex sie ist. Wie oben erwähnt, erstellen wir eine neue Datei „api.js“ und speichern alle unsere API-Schnittstellen in dieser Datei. Zunächst stellen wir unsere gekapselten Axios in api.js vor //Importieren Sie unsere verpackten Axios Dienst aus „./index“ importieren Jetzt haben wir beispielsweise eine solche Schnittstelle, die eine Post-Anfrage ist: http://www.development.com/api/v1/articleEdit Wir können es wie folgt in api.js kapseln: export const apiArticleEdit = info => service.post('/api/v1/articleEdit', info); Wir definieren eine Methode „apiArticleEdit“, die über einen Parameter „info“ verfügt. Dabei handelt es sich um das Parameterobjekt, das wir beim Anfordern der Schnittstelle mitführen. Dann rufen wir unsere gekapselte Axios-Methode auf. Der erste Parameter ist unsere Schnittstellenadresse und der zweite Parameter ist der Info-Parameter von apiArticleEdit, also das Parameterobjekt, das bei der Anforderung der Schnittstelle mitgeführt wird. Exportieren Sie abschließend apiArticleEdit über Export. Dann können wir unsere API-Schnittstelle auf unserer Seite wie folgt aufrufen: importiere React, {Komponente} von 'react' importiere { apiArticleEdit } von './request/api' exportiere Standardklasse App erweitert Komponente { componentDidMount() { // Rufen Sie die API-Schnittstelle auf und geben Sie zwei Parameter an let params = { type: 2, author: '北孤清茶' } apiArticleEdit(params).then(res => { //Weitere Vorgänge nach erfolgreichem Datenabruf//..... Konsole.log(res) }) } rendern() { zurückkehren ( <div> </div> ) } } Für andere API-Schnittstellen erweitern Sie diese einfach weiter in api.js. Freundliche Erinnerung: Schreiben Sie Kommentare für jede Schnittstelle! ! ! Ein Vorteil der API-Schnittstellenverwaltung besteht darin, dass wir die APIs zentralisieren. Wenn wir die Schnittstelle später ändern müssen, können wir die entsprechende Änderung direkt in api.js finden, anstatt jede Seite einzeln aufzurufen, um unsere Schnittstelle zu finden und sie dann zu ändern, was sehr mühsam wäre. Entscheidend ist, was passiert, wenn die Änderungsmenge groß ist. Darüber hinaus besteht die Gefahr, dass wir unseren Geschäftscode versehentlich verschieben und unnötige Probleme verursachen, wenn wir die Schnittstelle direkt in unserem Geschäftscode ändern. Okay, hier ist endlich der fertige Axios-Kapselungscode. //Axios in index.js einführen importiere Axios von „Axios“; //Führen Sie das QS-Modul ein, um Post-Type-Daten zu serialisieren. Importieren Sie QS von „qs“. //Antds Nachrichtenaufforderungskomponente, Sie können sie entsprechend Ihrer eigenen UI-Komponente ändern. importiere {Nachricht} von 'antd' //Umgebungsvariablen speichern const isPrd = process.env.NODE_ENV == 'production'; //Unterscheiden Sie zwischen der Basis-URL der Entwicklungsumgebung und der Produktionsumgebung export const basciUrl = isPrd ? 'https://www.production.com' : 'http://www.development.com' //Den Axios-Basispfad festlegen const service = axios.create({ baseURL: Basis-URL }) // Interceptor anfordern service.interceptors.request.use(config => { // Überprüfen Sie vor dem Senden jeder Anfrage, ob sich ein Token im lokalen Speicher befindet. Sie können hier auch Redux verwenden, um nur zu demonstrieren, wie Sie das Token lokal erhalten. // Falls vorhanden, füge das Token dem Header der http-Anfrage hinzu, damit das Backend deinen Login-Status anhand des Tokens ermitteln kann. // Auch wenn das Token lokal vorhanden ist, ist es möglich, dass das Token abgelaufen ist, daher muss der Rückgabestatus im Antwort-Interceptor ermittelt werden const token = window.localStorage.getItem('userToken') || window.sessionStorage.getItem('userToken'); //Jeder Anfrage ein Token hinzufügen config.data = Objekt.assign({}, config.data, { Zeichen: Zeichen, }) //Setze den Anforderungsheader config.headers = { „Inhaltstyp“: „Anwendung/x-www-form-urlencoded; Zeichensatz=utf-8“ } //Serialisieren Sie die Anforderungsparameter, sonst werden die Post-Anforderungsparameter nicht normal vom Backend empfangen config.data = QS.stringify(config.data) Konfiguration zurückgeben }, Fehler => { Rückgabefehler; }) // Antwort-Interceptor service.interceptors.response.use(response => { //Machen Sie unterschiedliche Dinge basierend auf dem zurückgegebenen Statuscode// Verhandeln Sie unbedingt mit den Backend-Entwicklern einen einheitlichen Fehlerstatuscode, wenn (response.code) { Schalter (Antwortcode) { Fall 200: Antwortdaten zurückgeben; Fall 401: //Nicht angemeldet bei der Verarbeitungsmethode „break“; Fall 403: //Methode zur Verarbeitung des Token-Ablaufs break; Standard: Nachricht.Fehler(Antwort.Daten.Nachricht) } } anders { Antwort zurückgeben; } }) //Exportieren Sie abschließend den gekapselten Axios-Export-Standarddienst ZusammenfassenDies ist das Ende dieses Artikels über die Kapselung und API-Schnittstellenverwaltung von Axios in React-Projekten. Weitere relevante Inhalte zur Axios-Kapselung und API-Schnittstelle in React 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:
|
<<: SQL Left Join und Right Join - Prinzip und Beispielanalyse
>>: Implementierung der Docker-Bereitstellung von Webprojekten
In diesem Artikelbeispiel wird der spezifische Im...
Frage Beim Ausführen von gdb im Docker wird ein H...
HTML Code: Code kopieren Der Code lautet wie folgt...
Dieser Artikel stellt hauptsächlich die Prozessan...
1. Felder hinzufügen: Tabelle Tabellennamen änder...
Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...
Inhaltsverzeichnis 1. Was ist der Nutzen von Prov...
Problembeschreibung Vor kurzem gab es einen MySQL...
1. Zunächst müssen wir zwischen der Tomcat-Protok...
Ich bin vor kurzem in ein neues Unternehmen einge...
Confluence ist kostenpflichtig, kann aber für die...
Inhaltsverzeichnis Erstellen von Arrays in JavaSc...
MySQL-Escape Escape bedeutet die ursprüngliche Se...
Hintergrund Als ich in diesen beiden Tagen Docker...
Das Protokoll der Ressourcendatei weglassen Es wi...