基于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. 工作中一些常用的linux命令

    问题一: 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案:绝对路径:如/etc/init.d当前目录和上层目录:./  ../主目录:~/切换目录 ...

  2. 十七 Ajax&校验用户名功能

    Ajax: 即"Asynchronous JavaScript And XML", 异步JavaScript和XML , 是指一种创建的交互式页面应用的网页开发技术,它并不是新的技 ...

  3. c/c++ 获取BMP文件信息

    #include <stdio.h> #include <string.h> typedef struct BITMAPFILEHEADER { // BMP文件头 u_int ...

  4. Jmockit如何同时mock多个类的静态方法

    使用Jmockit来mock类的静态方法,网上有很多mock单个类静态方法的例子.有使用Expectations,还有使用MockUp的. 但是如果想在一个测试方法中mock多个类的静态方法,该怎么写 ...

  5. java 寒假作业

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

  6. L2-012. 关于堆的判断(最小堆)

    将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y are siblings”:x和y ...

  7. 冰蝎动态二进制加密WebShell基于流量侧检测方案

    概述 冰蝎是一款新型动态二进制加密网站工具.目前已经有6个版本.对于webshell的网络流量侧检测,主要有三个思路.一:webshell上传过程中文件还原进行样本分析,检测静态文件是否报毒.二:we ...

  8. mysql 权限管理 grant revoke

    grant all privileges  on  database.table to 'user'@'ip' identified by 'passwd' with grant  option; g ...

  9. 013.Delphi插件之QPlugins,模块化代码示例

    这个DEMO的是一个定义了一个窗体插件接口,把其他窗口注册到这个窗体插件接口中.主程序运行起来,就遍历一下窗体插件接口,把每个窗体内嵌到对话框中 运行效果如下 主窗口代码如下 unit Frm_Mai ...

  10. javascript中call与this的初见

    call定义 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明:call 方法可以用来代替另一 ...