基于vue-cli2.x封装axios

src目录

axios.js

import axios from 'axios'
import { Indicator, Toast } from 'mint-ui'

// request 拦截器
axios.interceptors.request.use(config => {
  Indicator.open({ text: '加载中...', spinnerType: 'snake' })
  return config
}, err => {
  Indicator.close();
  Toast({ message: '请检查您的网络连接并重试', duration: 2000, className: 'mToast' })
  return Promise.reject(err)
})

// response 拦截器
axios.interceptors.response.use(
  config => {
    Indicator.close();
    return config
  }, err => {
    Indicator.close();
    Toast({ message: '请检查您的网络连接并重试', duration: 2000 })
    Promise.reject(err)
  }
)

export default axios

config.js

// 在 axios中,利用QS包装data数据
import Qs from 'qs'
const config = {
  baseURL: 'http://www.****.top:8888/',
  url: '',
  method: 'get',
  params: {},
  data: {},
  timeout: 100000,
  withCredentials: false,
  responseType: 'json',
  headers: {
    'Content-Type': 'application/json'
  },
  maxContentLength: 10000,
  maxRedirects: 5,
  transformResponse: [function(data) {
    return data
  }],
  paramsSerializer: function(params) {
    return Qs.stringify(params)
  },
  onUploadProgress: function(progressEvent) {
    // console.log('onUploadProgress...');
  },
  onDownloadProgress: function(progressEvent) {
    // console.log('onDownloadProgress...');
  }
}

export default config

fetch.js

// 引入 请求拦截 配置
import $axios from "./axios"
// 引入 请求参数 配置
import config from './config'

config.headers.Authorization = window.sessionStorage.getItem('token') || ''

// 封装成自己的方法
fetch = async function(url, method, request, other) {
  let response
  if(method == 'post') {
    config.data = request
    response = await $axios.post(url, request, config)
  } else if(method == 'get') {
    config.params = request
    response = await $axios.get(url, config)
  }
  console.log(response)
  return response
}

export default fetch

测试

.vue文件

<template>
  <div>
    <hr>
    <h1 @click="postJson">login-postJson</h1>
    <hr>
    <h1 @click="getJson">getJson</h1>
    <hr>
    <h1 @click="getUserList">getUserList</h1>
  </div>
</template>

<script>
import mix from './Apitest-mixins.ts'

export default {
  mixins: [mix]
}
</script>

.ts文件

import fetch from '../../request/fetch.js'
export default {
  methods: {
    async postJson() {
      const params = {
        "username": "admin",
        "password": "123456"
      }
      let { data: res } = await fetch('/login', 'post', params)
      window.sessionStorage.setItem('token', res.data.token)
      console.log(res)
    },
    async getJson() {
      let { data: res } = await fetch('/roles', 'get')
      console.log(res)
    },
    async getUserList() {
      let params = {
        query: 'a',
        pagenum: 2,
        pagesize: 10
      }
      const { data: res } = await fetch('/users', 'get', params )
      console.log(res)
    }
  }
}

遗留bug

请求头???百度了2天,问了同事也没有解决了,自己都奔溃了

Vue.js(18)之 axios简单封装的更多相关文章

  1. axios简单封装

    写在最前面 新手前端刚刚接触vue,感觉真的好用.项目中需要使用axios,然后学习了一下.借鉴网上一些大佬的经验,现在分享一下axios的简单封装,如果有什么错误的地方,请大家指出. axios安装 ...

  2. Vue.js的安装及简单使用

    一.Vue简介 二.Vue.js的安装 2.1.npm安装 2.1.1.node.js介绍及安装 简介: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基 ...

  3. vue-axios当只调用vue.js又需要axios请求多时

    可以将axios方法封装一个函数 (function () { ASK = { get:function (url,data,succFun,errFun) { axios.get(url,{ par ...

  4. vue axios 简单封装以及思考

    先安装 axios npm install axios axios的详细介绍以及用法 就不多说了请 移步 github ➡️  https://github.com/axios/axios 下面是简单 ...

  5. vue.js中使用Axios

    Axios为vue2.0官方推荐HTTP请求工具,之前的是vue-resource 在使用的过程中总结了两种使用方式: 1.和vue-resource使用类似 引入:import axios from ...

  6. 在使用Vue.js中使用axios库时,遇到415错误(不支持的媒体类型(Unsupported media type))

    知识点:vue2.0中使用axios进行(put,post请求时),遇到415错误 解决办法:在axios的第三个参数config中,设置请求头信息'Content-Type': 'applicati ...

  7. vue.js提交按钮时简单的if判断表达式示例

    简单的业务需求如下,看图说话 1:当充值金额没有填写的时候,会有Toast小弹框提示"请输入有效的充值金额" if (!this.money) { console.log('mon ...

  8. Vue.js(20)之 封装字母表(是这个名字吗0.0)

    HTML结构: <template> <div class="alphabet-container"> <h1>alphabet 组件</ ...

  9. Vue.js(19)之 封装calendar组件

    效果 需求 1.实现一个日历组件,如图: 2.显示某天的事项: 3.事项是模拟父组件请求接口返回的,数据格式如下: [ { id: '232', date: '2019-06-01', info: ' ...

随机推荐

  1. 留学Essay写作:精准用词很重要

    很多觉得自己英语成绩还行的同学经常在自己的文章里用一些浮夸或者是难度特别大的词语,以显示自己的英语水平.当然了,成功了倒也无可厚非,要是有些词语用错了那可是会被别人笑掉大牙的.因此英语中的精准用词就成 ...

  2. gym 101911

    A. Coffee Break 题意:每天有m小时,你喝咖啡需要花一小时,你想在n个时刻都喝过一次咖啡,老板规定连续喝咖啡的间隔必须是d以上,求最少需要多少天才能喝够n次咖啡,并输出每个时刻第几天喝. ...

  3. Beta阶段计划

    Beta阶段计划 JuJu   冲刺时间:12月27日至1月5号(遇到节假日顺延)   人员: 陈灿: 项目经理 金华:负责算法优化与提升 婷婷:同上 恩升:绘图 胡凯:对比pytorch的basel ...

  4. java 寒假作业

    寒假作业 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ (如果显示不出来,可以参见[图1.jpg]) 每个方 ...

  5. 用 k8s 运行一次性任务【转】

    容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序,完成后容 ...

  6. 记一次Redis+Getshell经验分享

    前言: 当我们接到一个授权渗透测试的时候,常规漏洞如注入.文件上传等尝试无果后,扫描端口可能会发现意外收获. 知己知彼乃百战不殆,Redis介绍: 简单来说 redis 就是一个Key-Value类型 ...

  7. vue题型

    一  v-show和v-if区别 个人理解 相同:v-show和v-if都能控制元素的显示和隐藏.两个都是开关. 区别: 1.v-if 是懒加载,是有条件的渲染,它会确保在切换过程中添加或者删除元素. ...

  8. Java中JSON字符串与java对象的互换实例详解(转)

    http://www.jb51.net/article/90914.htm 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要 ...

  9. 12 MySQL存储过程与函数

    存储过程和函数     存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合.     调用存储过程和函数可以简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输,提高数据处理 ...

  10. Oracle的操作经验

    采用Oracle进行sql语句 建表并设置主键,主键自增,某一字段唯一性约束等 <---如果表存在则删除---> declare num number; begin select coun ...