Vue Axios封装


Vue Axios封装


1.初 始vue化项目

vue init webpack deaxios # 使用脚手架创建项目 deaxios(项目名,自定义)
cd deaxios 			# 进入项目
npm install axios -S 		# 安装axios 
# 说明:-S就是–save的简写  –save会将包的名称及版本号放在dependencies里面。

2.封装axios

2.1 src文件夹下新建http文件夹, 用来放网络请求相关的文件 (个人习惯)
2.2 src/http 文件夹下, 创建 index.js 文件, 对axios进行封装
/* eslint-disable */
//第一步:实例化axios对象,并设置 1.请求地址;2.超时时间;3.设置请求头数据格式
const axios = require('axios'); // 创建axios对象
// import qs from 'qs'
axios.defaults.baseURL = 'http://192.168.56.100:8888'; // vue请求后端地址
axios.defaults.timeout = 10000; // 多久超时
axios.defaults.withCredentials = true; // 跨域访问需要发送cookie时一定要加axios.defaults.withCredentials = true;
/**
 * 设置请求传递数据的格式(看服务器要求的格式)
 * x-www-form-urlencoded
 * 默认提交表单
 * 把数据对象序列化成 表单数据
 */
// axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
// axios.defaults.transformRequest = data => qs.stringify(data);
/**
 * 设置默认提交 json
 * 把数据对象序列化成 json 字符串
 */
axios.defaults.headers['Content-Type'] = 'application/json'; // 设置默认提交 json
axios.defaults.transformRequest = data => JSON.stringify(data); // 把数据对象序列化成 json 字符串


// 第二步:对请求拦截器,和响应拦截器进行封装
/**
 * 请求拦截器: 发送请求前需要调用这个函数
 1.当没有登录时,直接跳转到登录页
 2.请求发送前把token获取,设置到header中
 */
axios.interceptors.request.use(config => {
// 从localStorage中获取token
  let token = localStorage.getItem('token');
// 如果有token, 就把token设置到请求头中Authorization字段中
  token && (config.headers.Authorization = token);
  return config;
}, error => {
  return Promise.reject(error);
});
/**
 * 响应拦截器:当后端返回数据给vue时会调用这个函数
 1.没次返回403错误时,跳转到login
 */
axios.interceptors.response.use(response => {
// 当响应码是 2xx 的情况, 进入这里
  //debugger   //调试
  return response.data;
}, error => {
// 当响应码不是 2xx 的情况, 进入这里
  //debugger  //调试
  return error
});


//第三步:使用上面的axios对象,对get请求和post请求进行封装
/**
 * get方法,对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 * {params, headers} 必须是一个对象的形式,{params}
 */
 
export function get(url, params, headers) {
  return new Promise((resolve, reject) => {
    axios.get(url, {params, headers}).then(res => {
      resolve(res.data)
    }).catch(err => {
      reject(err.data)
    })
  })
}

/**
 * post方法,对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 **/
export function post(url, params, headers) {
  return new Promise((resolve, reject) => {
    axios.post(url, params, headers).then((res) => {
      resolve(res.data)
    }).catch((err) => {
     
      reject(err.data)
    })
  })
}

export default axios; //一定要导出函数 不导出 调用不成
2.3 src/http 目录下创建 apis.js文件, 用来写 接口地址列表
/* eslint-disable */e
// 接口信息, 生成请求方法
// 引入 get方法, post方法
import { get, post } from '刚配的index路径' // 也就是axios 封装的路径  一般打出前面,会自己补全

// 请求的后端路由
export const login = (url,params, headers) => post(url, params, headers)   //参数要和 axios 封装的参数一样
3.小Demo
<template>
    <div>
        <h1>测试</h1>
      <p><button @click="get_all">获取数据</button></p>
      <p><button @click="add_data">增加数据</button></p>
      <p><button @click="update_data">修改数据</button></p>
      <p><button @click="delete_data">删除数据</button></p>
    </div>
</template>

<script> 
  //   导入 apis.js 里的的路由
  import {getx,putx,deletex,postx} from "../http/apis";

  export default {
        name: 'cs',//改名
        data() {
            return {
                msg: '',

            }
        },
        // 定义方法
        methods: {
          // 获取数据
          get_all(){
          // 直接调用Axios   getx() 就是我们自己封装的Axios
            getx().then(res=>{
                console.log(res)
            }).catch(err=>{
                console.log(err)
            })

          },

          // 增加数据
          add_data(){
            let data={"name":"laowang","password":"123","phone":"123"};
            postx(data).then(res=>{
              console.log(res)
            }).catch(err=>{
              console.log(err)
            })

          },
          //修改
          update_data(){
            let url='user/user/3/';
            let data={name:'小强',phone:123,password:6666};
            putx(url,data).then(res=>{
                console.log(res)
            }).catch(err=>{
                console.log(err)
            })
          },
          // 删除
          delete_data(){
            let url='user/user/3/';
            deletex(url).then(res=>{
              console.log(res)
            }).catch(err=>{
              console.log(err)
            })

          }



        },

    }
</script>

<style scoped>

</style>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值