웹 프론트엔드 JS 튜토리얼 Vue2 경로 탐색 후크 및 Axios 인터셉터를 캡슐화하는 방법

Vue2 경로 탐색 후크 및 Axios 인터셉터를 캡슐화하는 방법

May 25, 2018 pm 02:26 PM
vue2 항해

이번에는 Vue2 라우팅 및 탐색 후크와 Axios 인터셉터를 캡슐화하는 방법과 Vue2 라우팅 및 탐색 후크 및 Axios 인터셉터를 캡슐화하는 데 참고사항이 무엇인지 보여드리겠습니다. 다음은 실제 사례입니다.

1.앞에 작성

최근에 Vue2를 배우고 있는데 일부 페이지에서 데이터를 요청하려면 사용자 로그인 권한이 필요하고 서버 응답이 예상과 다른데 처리할 수 없는 문제가 발생했습니다. 각 페이지가 따로 있어서 axios가 인터셉터라는 좋은 기능을 제공하는구나 하는 생각이 들었고, 그러다가 이런 글이 나왔습니다.

2. 특정 요구사항

  1. 사용자 인증 및 리디렉션: Vue

  2. 요청 데이터 직렬화: axios

  3. 에서 제공하는 요청 인터셉터 사용: 인터페이스 오류 정보 처리: 사용 axios

3. 간단한 구현

3.1 라우팅 및 탐색 후크 수준에서 인증 및 리디렉션 캡슐화

라우팅 및 탐색 후크의 모든 구성은 여기 router/index.js에 있습니다. are some Code

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
})
로그인 후 복사

아래의 논리적 처리 부분의 코드를 중심으로 살펴보겠습니다

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
로그인 후 복사

이 시점에서 Routing Hook 수준의 인증 처리가 완료되는데, 주의 깊게 보면 다음과 같은 쿼리가 있다는 것을 알 수 있습니다. 로그인 페이지로 이동할 때 호출되는 다음 메서드의 개체입니다. 로그인 성공 후 대상 페이지로 리디렉션해야 하기 때문에 대상 경로의 주소가 전달됩니다.

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)
 }
)
로그인 후 복사

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)
 }
)
로그인 후 복사

읽고 나면 마스터하셨을 것입니다. 이 기사의 사례 방법에 대해 더 흥미로운 정보를 보려면 PHP 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

vue의 내장 구성 요소 사용 단계에 대한 자세한 설명

vue 선택 구성 요소를 작동하고 비활성화하는 방법

위 내용은 Vue2 경로 탐색 후크 및 Axios 인터셉터를 캡슐화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

vue2와 vue3의 라이프사이클 실행 순서의 차이점은 무엇입니까? vue2와 vue3의 라이프사이클 실행 순서의 차이점은 무엇입니까? May 16, 2023 pm 09:40 PM

vue2와 vue3의 라이프사이클 실행 순서 차이 라이프사이클 비교 vue2의 실행 순서 beforeCreate=>created=>beforeMount=>mounted=>beforeUpdate=>updated=>beforeDestroy=>destroyed vue3의 실행 순서 setup=>onBeforeMount= >onMounted=> onBeforeUpdate=>onUpdated=>onBeforeUnmount=&g

내비게이션 지도의 가로 숫자 8은 무엇인가요? 내비게이션 지도의 가로 숫자 8은 무엇인가요? Jun 27, 2023 am 11:43 AM

내비게이션 지도의 가로 숫자 8은 안개를 의미하고, 보통은 노란색 8 경고 신호, 심각은 주황색 8 경고 신호를 의미합니다.

Vue2 diff 알고리즘을 빠르게 이해하세요. (자세한 설명은 그림과 텍스트로 설명되어 있습니다.) Vue2 diff 알고리즘을 빠르게 이해하세요. (자세한 설명은 그림과 텍스트로 설명되어 있습니다.) Mar 17, 2023 pm 08:23 PM

diff 알고리즘은 동일한 수준의 트리 노드를 비교하는 효율적인 알고리즘으로, 트리를 계층별로 검색하고 탐색할 필요가 없습니다. 그렇다면 diff 알고리즘에 대해 얼마나 알고 있나요? 다음 글은 vue2의 diff 알고리즘에 대한 심층 분석을 제공할 것입니다. 도움이 되길 바랍니다!

바이두 지도 앱 최신 버전 18.8.0 출시, 신호등 레이더 기능 최초 도입 및 실시간 주차 추천 기능 추가 바이두 지도 앱 최신 버전 18.8.0 출시, 신호등 레이더 기능 최초 도입 및 실시간 주차 추천 기능 추가 Aug 06, 2023 pm 06:05 PM

Baidu Map App의 Android 및 iOS 버전 모두 최초로 신호등 레이더 기능을 도입한 버전 18.8.0을 출시하여 업계를 선도하고 있습니다. 공식 소개에 따르면 신호등 레이더를 켠 후 자동 감지를 지원합니다. Beidou High-Precision은 실시간으로 위치를 파악할 수 있으며, 전국 100만 개 이상의 신호등이 자동으로 녹색 물결 알림을 실행합니다. 또한 새로운 기능은 완전 무음 내비게이션을 제공하여 지도 영역을 더욱 간결하게 만들고 주요 정보를 한눈에 명확하게 하며 음성 방송을 제공하지 않아 운전자가 운전에 더 집중할 수 있도록 합니다. 2020년 10월 실시간 카운트다운 예측을 지원하는 내비게이션은 신호등 교차로에 접근할 때 남은 카운트다운 초를 자동으로 표시하여 사용자가 항상 전방의 도로 상황을 파악할 수 있도록 합니다. 2022년 12월 31일까지 신호등 카운트다운

축구 내비게이션 음성 패키지는 어떤 내비게이션 소프트웨어에 포함되어 있나요? 축구 내비게이션 음성 패키지는 어떤 내비게이션 소프트웨어에 포함되어 있나요? Nov 09, 2022 pm 04:33 PM

"Amap Navigation" 소프트웨어의 축구 내비게이션 음성 패키지는 Amap 지도의 자동차 버전용 내비게이션 음성 패키지 중 하나입니다. 내용은 Huang Jianxiang의 축구 해설 버전의 내비게이션 음성입니다. 설정 방법: 1. Amap 소프트웨어를 엽니다. 2. "추가 도구" - "내비게이션 음성" 옵션을 클릭합니다. 3. "Huang Jianxiang Passionate Voice"를 찾아 "다운로드"를 클릭합니다. , "음성 사용"을 클릭하세요.

Amap, 업그레이드된 버전의 운전 ETA 서비스 출시: 현재 도로 상황을 실시간 분석하고 더욱 정확한 예상 도착 시간 제공 Amap, 업그레이드된 버전의 운전 ETA 서비스 출시: 현재 도로 상황을 실시간 분석하고 더욱 정확한 예상 도착 시간 제공 Apr 30, 2024 am 08:37 AM

4월 29일 이 사이트의 소식에 따르면 Amap은 ETA 운전의 업그레이드 버전 출시를 공식적으로 발표했습니다. 현재 순간부터 지정된 경로를 따라 목적지까지 이동) 서비스는 사용자가 보다 정확한 경로 계획 기간 및 교통 상황을 추정하고 여행 결정을 내리는 데 도움을 주는 것을 목표로 합니다. 이 지도 애플리케이션은 최신 업그레이드된 Amap 앱으로, 교통 흐름 패턴을 더 잘 포착하고 학습할 수 있으며 도시 도로 네트워크 및 고속도로 시스템을 지원하고 시공간을 정확하게 묘사할 수 있는 "초대형 그래프 컨볼루션 신경망 모델"을 도입합니다. 교통 상황의 역동적인 변화. 또한 새 버전의 지도에는 iTransformer 시계열 예측 모델이 추가로 통합되어 실시간 분석을 지원합니다.

Vue를 통해 이미지 탐색 및 썸네일 탐색을 구현하는 방법은 무엇입니까? Vue를 통해 이미지 탐색 및 썸네일 탐색을 구현하는 방법은 무엇입니까? Aug 18, 2023 pm 02:51 PM

Vue를 통해 이미지 탐색 및 썸네일 탐색을 구현하는 방법은 무엇입니까? 웹 애플리케이션이 발전하면서 사진은 일상 생활에서 점점 더 중요한 역할을 하고 있습니다. 많은 경우 이미지 탐색 및 썸네일 탐색 기능을 구현해야 합니다. 이 기사에서는 Vue 프레임워크를 사용하여 이 기능을 구현하고 코드 예제를 제공하는 방법을 소개합니다. Vue에서는 Vue 플러그인을 사용하여 이미지 탐색 및 썸네일 탐색 기능을 구현할 수 있습니다. 인기 있는 플러그인은 간단하고 사용하기 쉬운 인터페이스를 제공하는 vue-gallery입니다.

uniapp에서 페이지 이동 및 탐색을 구현하는 방법 uniapp에서 페이지 이동 및 탐색을 구현하는 방법 Oct 20, 2023 pm 02:07 PM

uniapp에서 페이지 이동 및 탐색을 구현하는 방법 uniapp은 Vue.js를 기반으로 하는 프런트엔드 프레임워크로, 개발자는 모바일 애플리케이션을 빠르게 개발할 수 있습니다. uniapp에서 페이지 이동 및 탐색 구현은 매우 일반적인 요구 사항입니다. 이 기사에서는 uniapp에서 페이지 점프 및 탐색을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 페이지 점프 uniapp에서 제공하는 메소드를 사용하여 페이지를 점프할 수 있습니다. uniapp에서는 구현을 위한 일련의 메소드를 제공합니다.

See all articles