웹 프론트엔드 JS 튜토리얼 Vue를 사용하여 Axios 플러그인을 보조 캡슐화하는 방법

Vue를 사용하여 Axios 플러그인을 보조 캡슐화하는 방법

May 28, 2018 pm 03:01 PM
axios 중고등 학년 캡슐화

이번에는 Vue를 사용하여 Axios 플러그인을 다시 캡슐화하는 방법을 보여드리겠습니다. Vue를 사용하여 Axios 플러그인을 다시 캡슐화할 때 주의 사항은 무엇입니까?

어떤 방법으로 데이터를 얻든 프로젝트의 경우 코드는 유지 관리가 쉬워야 하고, 둘째, 아름답게 작성되어야 하므로 캡슐화 계층을 추가해야 합니다.

vuejs2.0은 더 이상 vue-를 유지하지 않습니다. vuejs2.0은 이미 axios를 사용하고 있는데, 이것이 제가 axios로 전환하는 주된 이유입니다. 더 이상 고민하지 마세요:

기본 패키징 요구 사항:

  1. 통합 URL 구성

  2. 통합 API 요청

  3. 요청(요청) 인터셉터, 예: 토큰 가져오기 등, 요청 헤더 설정

  4. 응답(응답) 인터셉터, 예: 통합오류 처리, 페이지 리디렉션 등

  5. 필요에 따라 결합 Vuex는 전역 로딩 애니메이션 또는 오류 처리를 수행합니다.

파일 구조를 사용하여 axios를 Vue 플러그인으로 캡슐화합니다.

src 폴더에서 관련 캡슐화를 위해 vue-cli를 사용합니다:

src
  |
-- http 封装axios模块文件夹
   |
---- config.js axios的默认配置
---- api.js 二次封装axios,拦截器等
---- interface.js 请求接口文件
---- index.js 将axios封装成插件
로그인 후 복사

config. js

기본 구성은 gitHub를 참조합니다. 다음은 단지 예입니다.

export default {
  method: 'post',
  // 基础url前缀
  baseURL: 'https://easy-mock.com/mock/5ad75e9f41d4d65f0e935be4/example',
  // 请求头信息
  headers: {
   'Content-Type':'application/json;charset=UTF-8'
  },
  // 参数
  data: {},
  // 设置超时时间
  timeout: 10000,
  // 携带凭证
  withCredentials: false,
  // 返回数据类型
  responseType: 'json'
}
로그인 후 복사

PS: 다음은 Mock 도구입니다. Easy Mock이 권장하는 위의 요청 주소는 이 도구입니다. 이 도구를 사용하는 방법은 나중에 시간이 나면 따로 글을 쓰겠습니다.

api.js

import axios from 'axios' // 注意先安装哦
import config from './config.js' // 倒入默认配置
import qs from 'qs' // 序列化请求数据,视服务端的要求
export default function $axios (options) {
  return new Promise((resolve, reject) => {
    const instance = axios.create({
      baseURL: config.baseURL,
      headers: {},
      transformResponse: [function (data) {}]
    }
  )
  // request 拦截器
  instance.interceptors.request.use(
    config => {
      // Tip: 1
      // 请求开始的时候可以结合 vuex 开启全屏的 loading 动画
      // Tip: 2 
      // 带上 token , 可以结合 vuex 或者重 localStorage
      // if (store.getters.token) {
      //   config.headers['X-Token'] = getToken() // 让每个请求携带token--['X-Token']为自定义key 请根据实际情况自行修改
      // } else {
      //   // 重定向到登录页面  
      // }
      // Tip: 3
      // 根据请求方法,序列化传来的参数,根据后端需求是否序列化
      if (config.method.toLocaleLowerCase() === 'post' 
        || config.method.toLocaleLowerCase() === 'put' 
        || config.method.toLocaleLowerCase() === 'delete') {
        config.data = qs.stringify(config.data)
      }
      return config
    },
    error => {
      // 请求错误时做些事(接口错误、超时等)
      // Tip: 4
      // 关闭loadding
      console.log('request:', error) 
    
      // 1.判断请求超时
      if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
        console.log('根据你设置的timeout/真的请求超时 判断请求现在超时了,你可以在这里加入超时的处理方案')
        // return service.request(originalRequest);//例如再重复请求一次
      }
      // 2.需要重定向到错误页面
      const errorInfo = error.response
      console.log(errorInfo)
      if (errorInfo) {
        // error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
        const errorStatus = errorInfo.status; // 404 403 500 ... 等
        router.push({
          path: `/error/${errorStatus}`
        })
      }
      return Promise.reject(error) // 在调用的那边可以拿到(catch)你想返回的错误信息
    }
  )
 
  // response 拦截器
  instance.interceptors.response.use(
    response => {
      let data;
      // IE9时response.data是undefined,因此需要使用response.request.responseText(Stringify后的字符串)
      if(response.data == undefined){
        data = response.request.responseText
      } else{
        data = response.data
      }
      // 根据返回的code值来做不同的处理(和后端约定)
      switch (data.code) {
        case '':
        break;
        default:
      }
      // 若不是正确的返回code,且已经登录,就抛出错误
      // const err = new Error(data.description)
      // err.data = data
      // err.response = response
      // throw err
      return data
    },
    err => {
      if (err && err.response) {
        switch (err.response.status) {
          case 400:
          err.message = '请求错误'
          break
      
          case 401:
          err.message = '未授权,请登录'
          break
      
          case 403:
          err.message = '拒绝访问'
          break
      
          case 404:
          err.message = `请求地址出错: ${err.response.config.url}`
          break
      
          case 408:
          err.message = '请求超时'
          break
      
          case 500:
          err.message = '服务器内部错误'
          break
      
          case 501:
          err.message = '服务未实现'
          break
      
          case 502:
          err.message = '网关错误'
          break
      
          case 503:
          err.message = '服务不可用'
          break
      
          case 504:
          err.message = '网关超时'
          break
      
          case 505:
          err.message = 'HTTP版本不受支持'
          break
      
          default:
        }
      }
      console.error(err)
      // 此处我使用的是 element UI 的提示组件
      // Message.error(`ERROR: ${err}`);
      return Promise.reject(err) // 返回接口返回的错误信息
    }
  )
 
  //请求处理
  instance(options)
    .then((res) => {
      resolve(res)
      return false
    })
    .catch((error) => {
      reject(error)
    })
  })
}
로그인 후 복사

interface.js

import axios from './api' // 倒入 api
/* 将所有接口统一起来便于维护
 * 如果项目很大可以将 url 独立成文件,接口分成不同的模块
 * 此处的数据依然来自 Easy Mock
 */
// 单独倒出
export const query = params => {
  return axios({
    url: '/query',
    method: 'get',
    params
  })
}
 
export const mock = params => {
  return axios({
    url: '/mock',
    method: 'get',
    params
  })
}
export const upload = data => {
  return axios({
    url: '/upload',
    method: 'post',
    data
  })
}
// 默认全部倒出
// 根绝需要进行 
export default {
  query,
  mock,
  upload
}
로그인 후 복사

index.js

는 Vue 플러그인으로 캡슐화되어 있어 (B)에서 (높음) 쉽게 사용할 수 있습니다.

// 倒入所有接口
import apiList from './interface'
const install = Vue => {
  if (install.installed) 
    return;
  install.installed = true;
  Object.defineProperties(Vue.prototype, {
    // 注意哦,此处挂载在 Vue 原型的 $api 对象上
    $api: {
      get() {
        return apiList
      }
    }
  })
}
export default install
로그인 후 복사

사용 지금까지 모든 것이 준비되었습니다. main.js에서 다음 작업을 수행합니다.

// 倒入 http 文件夹下的 index.js
import api from './http/index'
Vue.use(api)
// 此时可以直接在 Vue 原型上调用 $api 了
로그인 후 복사

요약

  1. 위의 2차 패키징은 더 포괄적이며 기본적으로 이전 요구 사항을 충족합니다

  2. 오류 처리를 위해서는 백엔드와 반환 값에 동의하고 구체적인 합의를 해야 합니다

  3. 캡슐화된 콜백이 많이 있습니다. 이를 사용할 때 결과를 처리하려면 then()도 추가해야 합니다. 비동기 및 대기 이해 어서, 물론 좋은 것은 숨겨야 합니다. 공유하지 않겠습니다...

PS: IE9는 Promise를 지원하지 않습니다. 폴리필을 설치해야 합니다

import 'babel-polyfill'
로그인 후 복사

이 기사의 사례를 읽고 방법을 마스터했습니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹 사이트의 다른 관련 기사를 주목하세요!

추천 자료:

Vue에서 상위-하위 구성 요소를 사용하여 할일 목록 구성 요소를 전달하는 방법

Vue를 사용하여 AdminLTE 템플릿을 통합하는 방법

위 내용은 Vue를 사용하여 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Vue에서 데이터 요청 선택: Axios 또는 Fetch? Vue에서 데이터 요청 선택: Axios 또는 Fetch? Jul 17, 2023 pm 06:30 PM

Vue에서 데이터 요청 선택: AxiosorFetch? Vue 개발에서 데이터 요청을 처리하는 것은 매우 일반적인 작업입니다. 데이터 요청에 사용할 도구를 선택하는 것은 고려해야 할 질문입니다. Vue에서 가장 일반적인 두 가지 도구는 Axios와 Fetch입니다. 이 기사에서는 두 도구의 장단점을 비교하고 선택하는 데 도움이 되는 몇 가지 샘플 코드를 제공합니다. Axios는 브라우저와 Node.js에서 작동하는 Promise 기반 HTTP 클라이언트입니다.

Vue와 Axios를 효율적으로 활용하여 프런트엔드 데이터 일괄 처리 구현 Vue와 Axios를 효율적으로 활용하여 프런트엔드 데이터 일괄 처리 구현 Jul 17, 2023 pm 10:43 PM

Vue와 Axios를 효율적으로 활용하여 프런트엔드 데이터의 일괄 처리를 구현합니다. 프런트엔드 개발에서는 데이터 처리가 일반적인 작업입니다. 많은 양의 데이터를 처리해야 할 때 효과적인 방법이 없으면 데이터 처리가 매우 번거롭고 비효율적이 됩니다. Vue는 뛰어난 프런트엔드 프레임워크이고 Axios는 널리 사용되는 네트워크 요청 라이브러리로 함께 작동하여 프런트엔드 데이터의 일괄 처리를 구현할 수 있습니다. 이 글에서는 데이터 일괄 처리를 위해 Vue와 Axios를 효율적으로 사용하는 방법을 자세히 소개하고 관련 코드 예제를 제공합니다.

TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. Apr 17, 2024 pm 08:00 PM

4월 17일 이 사이트의 뉴스에 따르면 TrendForce는 최근 Nvidia의 새로운 Blackwell 플랫폼 제품에 대한 수요가 강세를 보이고 있으며, 이로 인해 TSMC의 전체 CoWoS 패키징 생산 능력이 2024년에 150% 이상 증가할 것으로 예상된다는 보고서를 발표했습니다. NVIDIA Blackwell의 새로운 플랫폼 제품에는 B 시리즈 GPU와 NVIDIA 자체 GraceArm CPU를 통합한 GB200 가속기 카드가 포함됩니다. TrendForce는 현재 공급망이 GB200에 대해 매우 낙관적이며, 출하량이 2025년에 100만 개를 초과할 것으로 예상되며 이는 Nvidia 고급 GPU의 40~50%를 차지할 것으로 확인했습니다. 엔비디아는 하반기에 GB200, B100 등의 제품을 출시할 계획이지만, 업스트림 웨이퍼 패키징에는 더욱 복잡한 제품을 채택해야 합니다.

FET 코인은 얼마나 빨리 두 번째 급등을 경험하게 될까요? 최대 증가 전망은 얼마나 됩니까? FET 코인은 얼마나 빨리 두 번째 급등을 경험하게 될까요? 최대 증가 전망은 얼마나 됩니까? Apr 14, 2024 am 09:16 AM

FET 화폐는 AI 인공지능 분야의 대표적인 화폐로서 상당한 투자수익률로 인해 많은 주목을 받아왔습니다. FET 화폐는 Fetch.ai 플랫폼에서 사용하는 정량적 분할형 토큰일 뿐만 아니라 플랫폼의 스마트 계약 및 오라클의 중요한 부분입니다. 강세장이 도래하면서 FET 코인의 가격은 계속해서 상승하고 있지만, 투자자들은 여전히 ​​이러한 시장 추세에 만족하지 못하고 있습니다. 그들은 언제 FET 코인이 두 번째 급등을 경험할 것인지 알고 싶어합니다. 그리고 통화권 분석가들이 FET 코인의 최대 상승폭을 얼마나 예측하는지 알고 싶습니다. 업계 분석가들의 예측에 따르면 두 번째 급등은 2025년에 최대 8.15달러 상승할 것으로 예상됩니다. 다음에는 에디터가 자세히 알려드리겠습니다. FET 코인은 얼마나 빨리 두 번째 급등을 경험하게 될까요? 업계 분석가들의 예측에 따르면 FET 통화는 두 번째로 폭발할 것입니다.

Vue와 Axios는 비동기 데이터 요청의 동기 처리를 구현합니다. Vue와 Axios는 비동기 데이터 요청의 동기 처리를 구현합니다. Jul 17, 2023 am 10:13 AM

Vue와 Axios는 비동기 데이터 요청의 동기 처리를 실현합니다. 소개: 최신 프런트 엔드 개발에서는 페이지가 비동기 데이터 요청을 통해 데이터를 가져와 동적으로 표시해야 하기 때문에 비동기 처리는 불가피한 요구 사항이 되었습니다. 그러나 비동기 데이터 요청으로 인해 코드 논리가 복잡해지고 유지 관리가 어려워지는 경우가 많습니다. Vue 프레임워크에서 Axios 라이브러리를 사용하면 비동기 데이터 요청의 동기 처리를 쉽게 구현할 수 있으므로 코드의 가독성과 유지 관리성이 향상됩니다. 1. Vue 소개 Vue는 경량 프론트엔드 프레임워크입니다.

AMD 'Strix Halo' FP11 패키지 크기 노출: Intel LGA1700과 동일, Phoenix보다 60% 더 큼 AMD 'Strix Halo' FP11 패키지 크기 노출: Intel LGA1700과 동일, Phoenix보다 60% 더 큼 Jul 18, 2024 am 02:04 AM

이 웹사이트는 7월 9일에 AMD Zen5 아키텍처 "Strix" 시리즈 프로세서에 두 가지 패키징 솔루션이 있을 것이라고 보고했습니다. 더 작은 StrixPoint는 FP8 패키지를 사용하고 StrixHalo는 FP11 패키지를 사용합니다. 출처: videocardz 출처 @Olrak29_ 최근 밝혀진 바에 따르면 StrixHalo의 FP11 패키지 크기는 37.5mm*45mm(1687제곱밀리미터)로 Intel의 AlderLake 및 RaptorLake CPU의 LGA-1700 패키지 크기와 동일합니다. AMD의 최신 Phoenix APU는 25*40mm 크기의 FP8 패키징 솔루션을 사용합니다. 이는 StrixHalo의 F가

Vue와 Axios는 데이터 요청에 대한 오류 처리 및 프롬프트 메커니즘을 구현합니다. Vue와 Axios는 데이터 요청에 대한 오류 처리 및 프롬프트 메커니즘을 구현합니다. Jul 17, 2023 am 09:04 AM

Vue와 Axios는 데이터 요청에 대한 오류 처리 및 프롬프트 메커니즘을 구현합니다. 소개: Vue 개발에서 Axios는 데이터 요청에 자주 사용됩니다. 하지만 실제 개발 과정에서는 요청 오류가 발생하거나 서버에서 오류 코드를 반환하는 경우가 자주 발생합니다. 사용자 경험을 개선하고 적시에 요청 오류를 감지 및 처리하려면 오류 처리 및 프롬프트를 위한 몇 가지 메커니즘을 사용해야 합니다. 이 기사에서는 Vue 및 Axios를 사용하여 오류 처리 및 데이터 요청에 대한 프롬프트 메커니즘을 구현하는 방법을 소개하고 코드 예제를 제공합니다. 액시 설치

PHP의 패키징 기술 및 응용 PHP의 패키징 기술 및 응용 Oct 12, 2023 pm 01:43 PM

PHP의 캡슐화 기술과 애플리케이션 캡슐화는 객체 지향 프로그래밍에서 중요한 개념입니다. 이는 외부 프로그램에 대한 통합 액세스 인터페이스를 제공하기 위해 데이터와 데이터에 대한 작업을 함께 캡슐화하는 것을 의미합니다. PHP에서는 액세스 제어 수정자와 클래스 정의를 통해 캡슐화를 달성할 수 있습니다. 이 기사에서는 PHP의 캡슐화 기술과 해당 애플리케이션 시나리오를 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. 캡슐화된 액세스 제어 수정자 PHP에서 캡슐화는 주로 액세스 제어 수정자를 통해 이루어집니다. PHP는 세 가지 액세스 제어 수정자를 제공합니다.

See all articles