Rumah hujung hadapan web tutorial js 怎样对Vue2路由导航钩子与axios拦截器封装

怎样对Vue2路由导航钩子与axios拦截器封装

May 25, 2018 pm 02:26 PM
vue2 navigasi cangkuk

这次给大家带来怎样对Vue2路由导航钩子与axios拦截器封装,对Vue2路由导航钩子与axios拦截器封装的注意事项有哪些,下面就是实战案例,一起来看一下。

1.写在前面

最近在学习Vue2,遇到有些页面请求数据需要用户登录权限、服务器响应不符预期的问题,但是总不能每个页面都做单独处理吧,于是想到axios提供了拦截器这个好东西,再于是就出现了本文。

2.具体需求

  1. 用户鉴权与重定向:使用Vue提供的路由导航钩子

  2. 请求数据序列化:使用axios提供的请求拦截器

  3. 接口报错信息处理:使用axios提供的响应拦截器

3.简单实现

3.1 路由导航钩子层面鉴权与重定向的封装

路由导航钩子所有配置均在router/index.js,这里是部分代码

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
})
Salin selepas log masuk

我们主要来看下面逻辑处理部分的代码

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
Salin selepas log masuk

至此,路由钩子层面的鉴权处理完毕,不过细心的你可能注意到:导航去登录页面调用的next方法里面有个query对象,携带了目标路由的地址,这是因为在登录成功后我们需要重定向到目标页面。

3.2 对axios拦截器封装

axios所有配置均在件script/getData.js文件,这里是本文件公共代码部分

"
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)
 }
)
Salin selepas log masuk

axios响应拦截器代码

/**
 * 响应拦截器,请求返回异常统一处理
 */
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)
 }
)
Salin selepas log masuk

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

vue的select内置组件使用步骤详解

怎样操作vue select组件使用与禁用

Atas ialah kandungan terperinci 怎样对Vue2路由导航钩子与axios拦截器封装. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah perbezaan antara susunan pelaksanaan kitaran hayat dalam vue2 dan vue3 Apakah perbezaan antara susunan pelaksanaan kitaran hayat dalam vue2 dan vue3 May 16, 2023 pm 09:40 PM

Perbezaan dalam susunan pelaksanaan kitaran hayat antara vue2 dan vue3 Perbandingan kitaran hayat Perintah pelaksanaan dalam vue2 beforeCreate=>dibuat=>beforeMount=>mounted=>beforeUpdate=>updated=>beforeDestroy=>musnah Perintah pelaksanaan dalam persediaan vue3==>onBeforeMount >onMounted=> onBeforeUpdate=>onUpdated=>onBeforeUnmount=&g

Fahami dengan cepat algoritma perbezaan Vue2 (penjelasan grafik terperinci) Fahami dengan cepat algoritma perbezaan Vue2 (penjelasan grafik terperinci) Mar 17, 2023 pm 08:23 PM

Algoritma diff ialah algoritma cekap yang membandingkan nod pokok pada tahap yang sama, mengelakkan keperluan untuk mencari dan melintasi lapisan pokok demi lapisan. Jadi berapa banyak yang anda tahu tentang algoritma diff? Artikel berikut akan memberi anda analisis mendalam tentang algoritma perbezaan vue2. Saya harap ia akan membantu anda!

Apakah angka mendatar 8 pada peta navigasi? Apakah angka mendatar 8 pada peta navigasi? Jun 27, 2023 am 11:43 AM

Angka mendatar 8 pada peta navigasi bermaksud jerebu, sederhana ialah isyarat amaran kuning 8, dan teruk ialah isyarat amaran oren 8.

Apl Peta Baidu versi terbaharu 18.8.0 dikeluarkan, memperkenalkan fungsi radar lampu isyarat buat kali pertama dan menambah fungsi pengesyoran tempat letak kereta masa nyata Apl Peta Baidu versi terbaharu 18.8.0 dikeluarkan, memperkenalkan fungsi radar lampu isyarat buat kali pertama dan menambah fungsi pengesyoran tempat letak kereta masa nyata Aug 06, 2023 pm 06:05 PM

Baidu Map App versi Android dan iOS telah mengeluarkan versi 18.8.0, yang memperkenalkan fungsi radar lampu isyarat buat kali pertama, menerajui industri Menurut pengenalan rasmi, selepas menghidupkan radar lampu isyarat, ia menyokong pengesanan automatik lampu isyarat semasa memandu tanpa perlu memasuki destinasi Beidou High-Precision boleh meletakkan kedudukan dalam masa nyata , 1 juta+ lampu isyarat di seluruh negara secara automatik mencetuskan peringatan gelombang hijau. Selain itu, fungsi baharu ini juga menyediakan navigasi senyap penuh, menjadikan kawasan peta lebih ringkas, maklumat penting sepintas lalu, dan tiada siaran suara, membolehkan pemandu lebih fokus pada pemanduan Peta Baidu akan melancarkan fungsi kira detik lampu isyarat Oktober 2020, menyokong ramalan kira detik masa nyata, navigasi akan memaparkan baki detik kira detik secara automatik apabila menghampiri persimpangan lampu isyarat, membolehkan pengguna sentiasa memahami keadaan jalan di hadapan. Kira detik lampu isyarat hingga 31 Disember 2022

Perisian navigasi yang manakah mengandungi pakej suara navigasi bola sepak? Perisian navigasi yang manakah mengandungi pakej suara navigasi bola sepak? Nov 09, 2022 pm 04:33 PM

Pakej suara navigasi bola sepak dalam perisian "Navigasi Amap" ialah salah satu pakej suara navigasi untuk versi kereta peta Amap Kandungannya ialah suara navigasi versi ulasan bola sepak Huang Jianxiang. Kaedah tetapan: 1. Buka perisian Amap; 2. Klik untuk memasukkan pilihan "Lagi Alat" - "Suara Navigasi" 3. Cari "Suara Ghairah Huang Jianxiang" dan klik "Muat turun"; , klik " Hanya gunakan suara".

Amap melancarkan versi perkhidmatan ETA pemanduan yang dinaik taraf: analisis masa nyata keadaan jalan semasa dan anggaran masa ketibaan yang lebih tepat Amap melancarkan versi perkhidmatan ETA pemanduan yang dinaik taraf: analisis masa nyata keadaan jalan semasa dan anggaran masa ketibaan yang lebih tepat Apr 30, 2024 am 08:37 AM

Menurut berita dari laman web ini pada 29 April, Amap secara rasmi mengumumkan pelancaran versi ETA pemanduan yang dinaik taraf (Nota dari tapak ini: ETA ialah anggaran masa ketibaan, yang merujuk kepada anggaran masa yang diperlukan untuk pengguna berlepas dari saat semasa dan mengikut laluan tertentu ke destinasi ) perkhidmatan, yang bertujuan untuk membantu pengguna membuat anggaran tempoh perancangan laluan dan keadaan trafik yang lebih tepat, dan membantu pengguna dalam membuat keputusan perjalanan. Aplikasi peta ini ialah Aplikasi Amap yang dinaik taraf terbaharu Ia memperkenalkan "model rangkaian saraf konvolusi graf berskala besar", yang boleh menangkap dan mempelajari corak aliran trafik dengan lebih baik, menyokong rangkaian jalan bandar dan sistem lebuh raya, serta boleh menggambarkan spatiotemporal dengan tepat. perubahan dinamik keadaan lalu lintas. Selain itu, versi baharu peta menyepadukan lagi model ramalan siri masa iTransformer untuk menyokong analisis masa nyata.

Bagaimana untuk melaksanakan penyemakan imbas imej dan navigasi lakaran kenit melalui Vue? Bagaimana untuk melaksanakan penyemakan imbas imej dan navigasi lakaran kenit melalui Vue? Aug 18, 2023 pm 02:51 PM

Bagaimana untuk melaksanakan penyemakan imbas imej dan navigasi lakaran kenit melalui Vue? Dengan perkembangan aplikasi web, gambar memainkan peranan yang semakin penting dalam kehidupan seharian kita. Dalam kebanyakan kes, kita perlu melaksanakan penyemakan imbas imej dan fungsi navigasi lakaran kenit. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Vue untuk mencapai fungsi ini dan menyediakan contoh kod. Dalam Vue, kami boleh menggunakan pemalam Vue untuk melaksanakan penyemakan imbas imej dan fungsi navigasi lakaran kenit. Pemalam yang popular ialah vue-gallery, yang menyediakan antara muka yang ringkas dan mudah digunakan

Bagaimana untuk melaksanakan lompatan halaman dan navigasi dalam uniapp Bagaimana untuk melaksanakan lompatan halaman dan navigasi dalam uniapp Oct 20, 2023 pm 02:07 PM

Cara melaksanakan lompatan halaman dan navigasi dalam uniapp uniapp ialah rangka kerja bahagian hadapan yang menyokong pengekodan satu kali dan penerbitan berbilang hujung Ia berdasarkan Vue.js Pembangun boleh menggunakan uniapp untuk membangunkan aplikasi mudah alih. Dalam uniapp, melaksanakan lompatan halaman dan navigasi adalah keperluan yang sangat biasa. Artikel ini akan memperkenalkan cara melaksanakan lompatan halaman dan navigasi dalam uniapp, dan memberikan contoh kod khusus. 1. Lompat halaman Gunakan kaedah yang disediakan oleh uniapp untuk melompat halaman uniapp menyediakan satu set kaedah untuk pelaksanaan.

See all articles