软件下载

axios二次封装及调用

软件下载 投稿 2022-06-06 09:59:31 浏览
聊聊 axios 的封装

 

安装

npm install qs 
npm install axios

引入

import axios from 'axios'
import Router from '../router/index'
import qs from 'qs'
import { Dialog } from 'vant';
// 引入url
const baseUrl = 'HTTPS:****'

文档

大家在开始配置的时候;可以先去看一哈官方文档;这样容易上手许多

拦截器

官方的解释是:你可以在请求和响应以前拦截它们并进行处理;

简单理解一哈:如果返回参数为1003表示登录过期,那么我们就可以在响应器中进行拦截处理达到自己想要的效果,如跳转到登录页面;

//拦截器;针对发送请求以前做的处理
axios.interceptors.request.use(function (config) {
  console.log(config);
  // Do something before request is sent
  return config;
}, function (error) {
  console.log(error);
  // Do something with request error
  return Promise.reject(error);
});

// 响应器;请求数据返回以后的处理
axios.interceptors.response.use(function (response) {
  // Do something with response data
  let res = response.data

  switch (res.code*1) {
    case 1003:
      Dialog.confirm({
        title: '登录已过期',
        message: '很抱歉,登录已过期,请重新登录',
      })
        .then(() => {
          // on confirm
          console.log('confirm');
          Router.replace({name:'Home'}) // 跳转到登录页面
        })
        .catch(() => {
          // on cancel
          console.log('cancel');
        });
      break;
    case -1:
      Dialog.alert({
        title: '登录已过期',
        message: res.msg,
      })
        .then(() => {
          // on confirm
          console.log('confirm');
        })
      break;
  
    default:
      break;
  }

  return response;
}, function (error) {
  // Do something with response error
  return Promise.reject(error);
});

初始化请求头

// 添加请求头;根据需求配饰即可
let headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Terminal-Type': 'innerH5'
}

请求方式处理

// 请求方式配置不同的处理
  if(method){
    method = method.toUpperCase() // 转为大写字母
    if(method == 'GET') { // 如果是get请求的处理
      // console.log(132); 
    }else if(method == 'POST'){ // 如果是post请求的处理
      headerPost = {
        'Content-Type': 'application/x-www-form-urlencoded',
      }
      data = qs.stringify(data) // 在post中处理数据序列化
    }
  }

完整版


import axios from 'axios'
import Router from '../router/index'
import qs from 'qs'
import { Dialog } from 'vant';
// url
const baseUrl = 'HTTPS://devapi.ulinkmall.com'

// 添加请求头;根据需求配饰即可
let headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Terminal-Type': 'innerH5'
}
//拦截器;针对发送请求以前做的处理
axios.interceptors.request.use(function (config) {
  console.log(config);
  // Do something before request is sent
  return config;
}, function (error) {
  console.log(error);
  // Do something with request error
  return Promise.reject(error);
});

// 响应器;请求数据返回以后的处理
axios.interceptors.response.use(function (response) {
  // Do something with response data
  let res = response.data

  switch (res.code*1) {
    case 1003:
      Dialog.confirm({
        title: '登录已过期',
        message: '很抱歉,登录已过期,请重新登录',
      })
        .then(() => {
          // on confirm
          console.log('confirm');
          Router.replace({name:'Home'}) // 跳转到登录页面
        })
        .catch(() => {
          // on cancel
          console.log('cancel');
        });
      break;
    case -1:
      Dialog.alert({
        title: '登录已过期',
        message: res.msg,
      })
        .then(() => {
          // on confirm
          console.log('confirm');
        })
      break;
  
    default:
      break;
  }

  return response;
}, function (error) {
  // Do something with response error
  return Promise.reject(error);
});

// 创建一个函数
const request = (params)=>{
  // let _self = this
  let headerPost = {}
  let url = params.url;
  let method = params.method || 'GET';
  let data = params.data;

  // 配置token请求;可以根据实际需求进行判断
  let token = localStorage.getItem('token')
  if(!token){
    Router.replace({name:'Home'}) // 跳转到登录页面
  }else {
    data = Object.assign({},data,{token:token}) // 合并参数
  }

  // 请求方式配置不同的处理
  if(method){
    method = method.toUpperCase() // 转为大写字母
    if(method == 'GET') { // 如果是get请求的处理
      // console.log(132); 
    }else if(method == 'POST'){ // 如果是post请求的处理
      headerPost = {
        'Content-Type': 'application/x-www-form-urlencoded',
      }
      data = qs.stringify(data) // 在post中处理数据序列化
    }
  }

  // 同过 Promise 封装一个请求接口
  return new Promise((resolve,reject)=>{
    axios({
      url:baseUrl + url,
      method:method,
      data:data,
      header:Object.assign({},headers,headerPost)
    })
    .then(res=>{
      resolve(res.data)
    })
    .catch(err=>{
      reject(err)
    })
    .finally(()=>{
      console.log('不管是否成功都要执行');
    })
  })
}

// 暴露出去
export default request

使用

封装接口

新建一个api.js文件

import request from './request'

// 获取楼层
export function getLouCe(params){
  return request({
    url:'/open/weal.p_index/floorList',
    method:'GET',
    data:params
  })
}

export function getCartProducts(){
    return request({
        url:'/open/weal.p_cart/index',
        method:'POST'
    })
}

组件中使用

function fn(){
    getCartProducts().then(res=>{
      console.log(res);
  })
}

大家可以根据自己的需求进行增加和修改

「真诚赞赏,手留余香」

求资源网

真诚赞赏,手留余香

使用微信扫描二维码完成支付

转载请注明:首页 > 投稿 » axios二次封装及调用

继续浏览有关编程的文章
发表评论
留言与评论(共有 0 条评论)
   
验证码:
版权声明

求资源网所发布的一切破解补丁,软件,以及其他分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途。
否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。