Heim Web-Frontend js-Tutorial So kapseln Sie den Vue2-Routennavigations-Hook und den Axios-Interceptor

So kapseln Sie den Vue2-Routennavigations-Hook und den Axios-Interceptor

May 25, 2018 pm 02:26 PM
vue2 导航 钩子

Dieses Mal zeige ich Ihnen, wie Sie Vue2-Routing- und Navigations-Hooks und Axios-Interceptoren kapseln und welche Vorsichtsmaßnahmen für die Kapselung von Vue2-Routing- und Navigations-Hooks und Axios-Interceptoren gelten gemeinsam einen Blick werfen. Schauen Sie mal rein.

1. Vorab geschrieben

Ich lerne kürzlich Vue2 und bin auf einige Seiten gestoßen, die Daten erfordern, die BenutzeranmeldungBerechtigungen erfordern, und die Serverantwort ist nicht wie erwartet. Problem, aber wir können nicht jede Seite einzeln behandeln, daher dachte ich, dass Axios eine gute Sache wie Interceptors bereitstellt, und dann erschien dieser Artikel.

2. Spezifische Anforderungen

  1. Benutzerauthentifizierung und -weiterleitung: Verwenden Sie den von Vue bereitgestellten Routing-Navigations-Hook

  2. Serialisierung von Anforderungsdaten: Verwenden Sie den von Axios bereitgestellten Anforderungs-Interceptor.

  3. Verarbeitung von Schnittstellenfehlerinformationen: Verwenden Sie den von Axios bereitgestellten Antwort-Interceptor

    3. Einfache Implementierung

3.1 Kapselung der Authentifizierung und Umleitung auf Routing- und Navigations-Hook-EbeneAlle Konfigurationen von Routing- und Navigations-Hooks befinden sich in router/index.js, hier Es ist Teil des Codes

import Vue from 'vue'
import Router from 'vue-router'
import { getUserData } from '@/script/localUserData'
const MyAddress = r => require.ensure([], () => r(require('@/views/MyAddress/MyAddress')), 'MyAddress')
Vue.use(Router)
const routes = [
 {
  path: '/profile/address',
  name: 'MyAddress',
  component: MyAddress,
  meta: {
   title: '我的地址',
   requireAuth: true
  }
 },
 // 更多...
]
const router = new Router({
 mode: 'history',
 routes
})
Nach dem Login kopieren

Schauen wir uns hauptsächlich den Code für den logischen Verarbeitungsteil unten an

let indexScrollTop = 0
router.beforeEach((to, from, next) => {
 // 路由进入下一个路由对象前,判断是否需要登陆
 // 在路由meta对象中由个requireAuth字段,只要此字段为true,必须做鉴权处理
 if (to.matched.some(res => res.meta.requireAuth)) {
  // userData为存储在本地的一些用户信息
  let userData = getUserData()
  // 未登录和已经登录的处理
  // getUserData方法处理后如果userData.token没有值就是undefined,下面直接判断
  if (userData.token === undefined) {
   // 执行到此处说明没有登录,君可按需处理之后再执行如下方法去登录页面
   // 我这里没有其他处理,直接去了登录页面
   next({
    path: '/login',
    query: {
     redirect: to.path
    }
   })
  } else {
   // 执行到说明本地存储有用户信息
   // 但是用户信息是否过期还是需要验证一下滴
   let overdueTime = userData.overdueTime
   let nowTime = +new Date
   // 登陆过期和未过期
   if (nowTime > overdueTime) {
    // 登录过期的处理,君可按需处理之后再执行如下方法去登录页面
    // 我这里没有其他处理,直接去了登录页面
    next({
     path: '/login',
     query: {
      redirect: to.path
     }
    })
   } else {
    next()
   }
  }
 } else {
  next()
 }
 if (to.path !== '/') {
  indexScrollTop = document.body.scrollTop
 }
 document.title = to.meta.title || document.title
})
router.afterEach(route => {
 if (route.path !== '/') {
  document.body.scrollTop = 0
 } else {
  Vue.nextTick(() => {
   document.body.scrollTop = indexScrollTop
  })
 }
})
export default router
Nach dem Login kopieren

An diesem Punkt ist die Authentifizierungsverarbeitung auf der Routing-Hook-Ebene abgeschlossen, aber wenn Sie Seien Sie vorsichtig, Sie werden möglicherweise Folgendes bemerken: Navigieren Sie zur Anmeldeseite. Die aufgerufene nächste Methode enthält ein Abfrageobjekt, das die Adresse der Zielroute enthält. Dies liegt daran, dass wir nach erfolgreicher Anmeldung zur Zielseite umleiten müssen.

3.2 Kapselung des Axios-Interceptors

Alle Axios-Konfigurationen befinden sich in der Datei script/getData.js. Hier ist der öffentliche Codeteil dieser Datei.

"
import qs from 'qs'
import { getUserData } from '@/script/localUserData '
import router from '@/router '
import axios from 'axios'
import { AJAX_URL } from '@/config/index '
axios.defaults.baseURL = AJAX_URL
> axios请求拦截器代码
 "
/**
 * 请求拦截器,请求发送之前做些事情
 */
axios.interceptors.request.use(
 config => {
  // POST || PUT || DELETE请求时先格式化data数据
  // 这里需要引入第三方模块qs
  if (
   config.method.toLocaleUpperCase() === 'POST' ||
   config.method.toLocaleUpperCase() === 'PUT' ||
   config.method.toLocaleUpperCase() === 'DELETE'
  ) {
   config.data = qs.stringify(config.data)
  }
  // 配置Authorization参数携带用户token
  let userData = getUserData()
  if (userData.token) {
   config.headers.Authorization = userData.token
  }
  return config
 },
 error => {
  // 此处应为弹窗显示具体错误信息,因为是练手项目,劣者省略此处
  // 君可自行写 || 引入第三方UI框架
  console.error(error)
  return Promise.reject(error)
 }
)
Nach dem Login kopieren

Axios-Antwort-Interceptor-Code

/**
 * 响应拦截器,请求返回异常统一处理
 */
axios.interceptors.response.use(
 response => {
  // 这段代码很多场景下没用
  if (response.data && response.data.success === false) {
   // 根据实际情况的一些处理逻辑...
   return Promise.reject(response)
  }
  return response
 },
 error => {
  // 此处报错可能因素比较多
  // 1.需要授权处用户还未登录,因为路由段有验证是否登陆,此处理论上不会出现
  // 2.需要授权处用户登登录过期
  // 3.请求错误 4xx
  // 5.服务器错误 5xx
  // 关于鉴权失败,与后端约定状态码为500
  switch (error.response.status) {
   case 403:
    // 一些处理...
    break
   case 404:
    // 一些处理...
    break
   case 500:
    let userData = getUserData()
    if (userData.token === undefined) {
     // 此处为未登录处理
     // 一些处理之后...再去登录页面...
     // router.push({
     //  path: '/login'
     // })
    } else {
     let overdueTime = userData.overdueTime
     let nowTime = +new Date
     if (overdueTime && nowTime > overdueTime) {
      // 此处登录过期的处理
      // 一些处理之后...再去登录页面...
      // router.push({
      //  path: '/login'
      // })
     } else {
      // 极端情况,登录未过期,但是不知道哪儿错了
      // 按需处理吧...我暴力回到了首页
      router.push({
       path: '/'
      })
     }
    }
    break
   case 501:
    // 一些处理...
    break
   default:
    // 状态码辣么多,按需配置...
    break
  }
  return Promise.reject(error)
 }
)
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

v

Detaillierte Erläuterung der Schritte zur Verwendung der ausgewählten integrierten Komponente von ue

So bedienen Sie die Vue-Auswahlkomponente: Verwendung und Deaktivierung

Das obige ist der detaillierte Inhalt vonSo kapseln Sie den Vue2-Routennavigations-Hook und den Axios-Interceptor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen der Ausführungsreihenfolge des Lebenszyklus in vue2 und vue3? Was ist der Unterschied zwischen der Ausführungsreihenfolge des Lebenszyklus in vue2 und vue3? May 16, 2023 pm 09:40 PM

Unterschiede in der Ausführungsreihenfolge des Lebenszyklus zwischen vue2 und vue3 Vergleich der Lebenszyklen Die Ausführungsreihenfolge in vue2 beforeCreate=>created=>beforeMount=>mounted=>beforeUpdate=>updated=>beforeDestroy=>destroyed Die Ausführungsreihenfolge in vue3 setup=>onBeforeMount= >onMounted=> onBeforeUpdate=>onUpdated=>onBeforeUnmount=&g

Verstehen Sie schnell den Vue2-Diff-Algorithmus (detaillierte grafische Erklärung) Verstehen Sie schnell den Vue2-Diff-Algorithmus (detaillierte grafische Erklärung) Mar 17, 2023 pm 08:23 PM

Der Diff-Algorithmus ist ein effizienter Algorithmus, der Baumknoten auf derselben Ebene vergleicht und so die Notwendigkeit vermeidet, den Baum Schicht für Schicht zu durchsuchen und zu durchlaufen. Wie viel wissen Sie über den Diff-Algorithmus? Der folgende Artikel wird Ihnen eine ausführliche Analyse des Diff-Algorithmus von vue2 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Was ist die horizontale Zahl 8 auf der Navigationskarte? Was ist die horizontale Zahl 8 auf der Navigationskarte? Jun 27, 2023 am 11:43 AM

Die horizontale Zahl 8 auf der Navigationskarte bedeutet Dunst, mäßig ist ein gelbes Warnsignal 8 und stark ist ein orangefarbenes Warnsignal 8.

Die neueste Version 18.8.0 der Baidu Maps App wurde veröffentlicht. Sie führt erstmals die Ampelradarfunktion ein und fügt eine Parkempfehlungsfunktion in Echtzeit hinzu Die neueste Version 18.8.0 der Baidu Maps App wurde veröffentlicht. Sie führt erstmals die Ampelradarfunktion ein und fügt eine Parkempfehlungsfunktion in Echtzeit hinzu Aug 06, 2023 pm 06:05 PM

Sowohl die Android- als auch die iOS-Version der Baidu Map App haben Version 18.8.0 veröffentlicht, die erstmals die Ampelradarfunktion einführt und damit branchenführend ist. Laut offizieller Einführung unterstützt sie nach dem Einschalten des Ampelradars die automatische Erkennung Beidou High-Precision kann die Position von Ampeln während der Fahrt in Echtzeit auslösen und so automatisch eine grüne Welle auslösen. Darüber hinaus bietet die neue Funktion eine vollständig stille Navigation, wodurch der Kartenbereich prägnanter wird, wichtige Informationen auf einen Blick klar sind und keine Sprachübertragung erforderlich ist, sodass sich der Fahrer mehr auf das Fahren konzentrieren kann. Baidu Maps startet eine Ampel-Countdown-Funktion Oktober 2020, unterstützt die Echtzeit-Countdown-Vorhersage. Die Navigation zeigt automatisch die verbleibenden Sekunden des Countdowns an, wenn sie sich einer Ampelkreuzung nähern, sodass Benutzer immer einen Überblick über die Straßenverhältnisse vor sich haben. Ampel-Countdown bis 31. Dezember 2022

In welcher Navigationssoftware ist das Fußball-Navigations-Sprachpaket enthalten? In welcher Navigationssoftware ist das Fußball-Navigations-Sprachpaket enthalten? Nov 09, 2022 pm 04:33 PM

Das Sprachpaket für die Fußballnavigation in der Software „Amap Navigation“ ist eines der Navigationssprachpakete für die Autoversion der Amap-Karte. Der Inhalt ist die Navigationsstimme der Fußballkommentarversion von Huang Jianxiang. Einstellungsmethode: 1. Öffnen Sie die Amap-Software. 2. Klicken Sie, um die Option „Weitere Tools“ – „Navigationsstimme“ aufzurufen. 3. Suchen Sie nach „Huang Jianxiang Passionate Voice“ und klicken Sie auf „Herunterladen“. , klicken Sie auf „Nur Sprache verwenden“.

Amap führt eine aktualisierte Version des ETA-Dienstes für Fahrgäste ein: Echtzeitanalyse des aktuellen Straßenzustands und genauere geschätzte Ankunftszeit Amap führt eine aktualisierte Version des ETA-Dienstes für Fahrgäste ein: Echtzeitanalyse des aktuellen Straßenzustands und genauere geschätzte Ankunftszeit Apr 30, 2024 am 08:37 AM

Laut Nachrichten dieser Website vom 29. April kündigte Amap offiziell die Einführung einer aktualisierten Version der Fahr-ETA an (Anmerkung dieser Website: ETA ist die geschätzte Ankunftszeit, die sich auf die geschätzte Zeit bezieht, die der Benutzer für die Abreise benötigt Vom aktuellen Moment aus verfolgen und einer bestimmten Route bis zum Ziel folgen)-Dienst, der Benutzern dabei helfen soll, die Dauer ihrer Route und die Verkehrslage genauer einzuschätzen und sie bei Reiseentscheidungen zu unterstützen. Diese Kartenanwendung ist die neueste aktualisierte Amap-App. Sie führt das „Ultra-Large-Scale-Graph-Faltungs-Neuronales-Netzwerk-Modell“ ein, das Verkehrsflussmuster besser erfassen und lernen, städtische Straßennetze und Autobahnsysteme unterstützen und das räumlich-zeitliche Bild genau darstellen kann dynamische Veränderungen der Verkehrsbedingungen. Darüber hinaus integriert die neue Version der Karte das iTransformer-Zeitreihenvorhersagemodell weiter, um Echtzeitanalysen zu unterstützen.

Wie implementiert man das Durchsuchen von Bildern und die Navigation in Miniaturansichten über Vue? Wie implementiert man das Durchsuchen von Bildern und die Navigation in Miniaturansichten über Vue? Aug 18, 2023 pm 02:51 PM

Wie implementiert man das Durchsuchen von Bildern und die Navigation in Miniaturansichten über Vue? Mit der Entwicklung von Webanwendungen spielen Bilder eine immer wichtigere Rolle in unserem täglichen Leben. In vielen Fällen müssen wir Funktionen zum Durchsuchen von Bildern und zum Navigieren in Miniaturansichten implementieren. In diesem Artikel wird erläutert, wie Sie das Vue-Framework zum Erreichen dieser Funktion verwenden, und es werden Codebeispiele bereitgestellt. In Vue können wir das Vue-Plug-in verwenden, um Funktionen zum Durchsuchen von Bildern und zum Navigieren in Miniaturansichten zu implementieren. Ein beliebtes Plugin ist vue-gallery, das eine einfache und benutzerfreundliche Oberfläche bietet

So implementieren Sie Seitensprung und Navigation in Uniapp So implementieren Sie Seitensprung und Navigation in Uniapp Oct 20, 2023 pm 02:07 PM

So implementieren Sie Seitensprünge und Navigation in Uniapp. Uniapp ist ein Front-End-Framework, das einmaliges Codieren und Multi-End-Veröffentlichung unterstützt. Es basiert auf Vue.js. Entwickler können Uniapp verwenden, um schnell mobile Anwendungen zu entwickeln. In Uniapp ist die Implementierung von Seitensprüngen und Navigation eine sehr häufige Anforderung. In diesem Artikel wird erläutert, wie Seitensprünge und Navigation in Uniapp implementiert werden, und es werden spezifische Codebeispiele bereitgestellt. 1. Seitensprung Verwenden Sie die von uniapp bereitgestellten Methoden, um zur Seite zu springen. Uniapp bietet eine Reihe von Methoden für die Implementierung.

See all articles