Vue3引入axios封装接口的两种方法实例

目录
  • 第一种
    • 1.安装
    • 2.新建一个http.js文件
    • 3.使用
  • 第二种
    • 1.安装
    • 2.新建
    • 3.http.js
    • 4.request.js
  • 总结

第一种

1.安装

npm install axios -S

2.新建一个http.js文件

import axios from "axios";
import qs from "qs";
import {
  Dialog,
  Toast
} from "vant";

// axios.defaults.baseURL = 'http://hplqy.suoluomei.cn/index.php?s=/hfs/Api/'  //正式
axios.defaults.baseURL = 'http://activitytest.hpl001.cn/crm_api/app/sinceOrder/' //测试

//post请求头
axios.defaults.headers.post["Content-Type"] =
  "application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
axios.defaults.timeout = 10000;

axios.interceptors.request.use(
  config => {
    Toast.loading({
      duration: 0,
      message: '加载中...',
      forbidClick: true,
    });
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

axios.interceptors.response.use(
  response => {
    Toast.clear();
    return response;
  },
  error => {
    Toast.clear();
    Dialog.alert({
      title: "提示",
      message: "网络请求失败,反馈给客服"
    });
  }
);

export default function axiosApi(type, params, method) {
  let sign = process.env.VUE_APP_SIGN
  if (process.env.NODE_ENV === 'production') {
    sign = localStorage.getItem("wx_sign")
  } else {
    sign = 'crm:user:sign:f0c8cbe468f6a34463d198268290903f'
  }
  var value = {
    sign: sign
  }
  var data = method == "post" ? qs.stringify(Object.assign(value, params)) : Object.assign(value, params)
  return new Promise((resolve, reject) => {
    axios({
        method: method,
        url: type,
        data: data
      })
      .then(res => {
        if (res.data.errcode == 0) {
          resolve(res.data)
        } else {
          // 接口错误提示
          Toast.fail(res.data.msg);
        }
      })
      .catch(err => {
        reject(err)
      });
  })
};

3.使用

import axiosApi from "../utils/http";
tabsHttp() {
      axiosApi("getProductClassFromCrm", {}, "post").then((res) => {
        for (let i = 0; i < res.data.length; i++) {
          res.data[i].type = 0;
        }
        this.sebarList = res.data;
      });
    },

第二种

1.安装

npm install axios -S

2.新建

3.http.js

import axios from "axios";
import qs from "qs";
import {
  Dialog
} from "vant";

// axios.defaults.baseURL = 'http://hp.suoluomei.cn/index.php'  //正式
axios.defaults.baseURL = 'http://hp.suoluomei.cn/index.php' //测试

//post请求头
axios.defaults.headers.post["Content-Type"] =
  "application/x-www-form-urlencoded;charset=UTF-8";
//设置超时
axios.defaults.timeout = 10000;

axios.interceptors.request.use(
  config => {
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

axios.interceptors.response.use(
  response => {
    if (response.status == 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  error => {
    Dialog.alert({
      title: "提示",
      message: "网络请求失败,请刷新重试"
    });
  }
);
export default {
  post(url, data) {
    return new Promise((resolve, reject) => {
      axios({
          method: 'post',
          url,
          data: qs.stringify(data),
        })
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        });
    })
  },

  get(url, data) {
    return new Promise((resolve, reject) => {
      axios({
          method: 'get',
          url,
          params: data,
        })
        .then(res => {
          resolve(res.data)
        })
        .catch(err => {
          reject(err)
        })
    })
  }
};

4.request.js

import http from './http'
const api_key = '233d4cad34c34d343785s34dw3er3ds3234esd4'
let sign = process.env.VUE_APP_SIGN
if (process.env.NODE_ENV === 'production') {
  sign = localStorage.getItem("sign")
} else {
  sign = '17a1920fdc3c3c25d1bf7c6dd724f5cf'
}

const post = (url, data = {}) =>
  http.post(
    url,
    Object.assign({
        api_key: api_key,
        sign,
      },
      // {
      //   data: Object.assign({
      //       role_id: role_id //如果需要再包层data就这样写
      //     },
      //     data
      //   )
      // }
      data
    )
  )
const get = (url, params = {}) =>
  http.get(
    url,
    Object.assign({
        api_key: api_key,
        sign
      },
      params
    )
  )

// 接口说明
const getFissionCourseList = data => post('getFissionCourseList', data)

const getGetrequs = params => get('getFissionCourseList', params)
//接口导出
export {
  getFissionCourseList,
  getGetrequs
}

5.页面引入使用

<template>
  <div class="box">
    <div class="yanjin">
      <div
        class="demo"
        ref='seder'
      >欢迎来到VUE3</div>
      <div
        class="demo"
        @click="testClick"
      >欢迎来到VUE3</div>
    </div>
    <div @click="go">跳转页面</div>
    <div @click="getRquset">
      点我调接口
    </div>
    <meHome :text='132'></meHome>
  </div>
</template>

<script>
import { getFissionCourseList, getGetrequs } from "../../utils/request";
import { reactive, toRefs, onMounted, onActivated } from "vue";
import meHome from "../me/me.vue";
import { async } from "q";
export default {
  components: {
    meHome,
  },
  setup() {
    // data
    const state = reactive({
      testMsg: "原始值",
    });
    //onLand生命周期
    onMounted(async () => {
      // 进入页面调用接口
      init();
      console.log(state.testMsg);
    });

    // onshow生命周期
    onActivated(async () => {});
    // methods事件
    const methods = {
      go() {
        this.$router.push({
          path: "/main",
          query: {
            course_id: 123,
          },
        });
      },
      testClick() {
        this.$nextTick(() => {
          this.$refs.seder.innerHTML = "更改了内容";
        });
      },
      async getRquset() {
        await getGetrequs({ t35: "get" }).then((res) => {
          console.log(res);
        });
      },
    };
    const init = async () => {
      await getFissionCourseList({ t35: "post" }).then((res) => {
        // console.log(res);
      });
      await getGetrequs({ t35: "get" }).then((res) => {
        // console.log(res);
      });
    };
    return {
      ...toRefs(state),
      ...methods,
    };
  },
};
</script>

<style src='./index.less' lang='less' scoped>
</style>

总结

到此这篇关于Vue3引入axios封装接口的两种方法的文章就介绍到这了,更多相关Vue3引入axios封装接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue中封装axios并实现api接口的统一管理

    在vue项目中,我们通常都是使用axios与后台进行数据交互,axios有很多好用的特性,这里不多做介绍,相关细节可以查阅axios中文网.在对axios进行封装之前,我们要使用vue脚手架工具创建一个vue项目(这里我用的是cli4). 安装 cnpm install axios --save-dev; // 安装axios cnpm install qs --save-dev; // 安装qs模块,用来序列化post类型的数据,否则后端无法接收到数据 模块引入 在src目录下创建一个serv

  • Vue中Axios的封装与接口管理详解

    目录 一. Axios 的封装 安装 Axios 引入 接口管理 统一暴露接口 在组件中使用 补充:封装get方法和post方法 总结 一. Axios 的封装 在 Vue 项目中,和后台进行数据交互是频繁且不可或缺的,刚开始没进行 Axios 封装的时候,每次请求后台数据都是写的完整的路径,特别长,尤其是基准地址,每次都要复制一遍加在前面,冗余特别大.封装完 Axios 后,调用接口就简短多了,如果后期出现基准地址的改变,只需要在配置中更改一次即可. 安装 Axios npm install

  • vue简单封装axios插件和接口的统一管理操作示例

    本文实例讲述了vue简单封装axios插件和接口的统一管理操作.分享给大家供大家参考,具体如下: 现在很多公司的项目都是前后端分离的项目,那么说到前后端分离,必定会有ajax请求来获得后台的数据. 在做jquery项目的时候,我们都会使用它封装好的方法来直接发起ajax请求. 在vue项目中,我们使用最多的就是axios这个插件,下面就简单的封装下这个插件并且把接口给统一化管理. 一.安装和配置 1.在项目根目录下打开终端安装 npm install axios -S 2.安装完成以后,在src

  • 详解Vue中Axios封装API接口的思路及方法

    一.axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中.他有很多优秀的特性,例如拦截请求和响应.取消请求.转换json.客户端防御XSRF等. 在一个项目中我们如果要使用很多接口的话,总不能在每个页面都写满了.get()或者.post()吧?所以我们就要自己手动封装一个全局的Axios网络模块,这样的话就既方便也会使代码量不那么冗余. 安装 > npm install axios //这个

  • axios封装,使用拦截器统一处理接口,超详细的教程(推荐)

    最近从0开始搭了一个vue-cli的项目, 虽然axios也可以直接拿来用,但是对接口比较零散,不太好进行维护,也会产生大量的重复代码,所以笔者对axios进行了统一接口处理,废话不多说,直接上代码. 首先,在vue-cli项目的src路径下新建一个axios文件夹,在axios文件夹里新建aps.js和request.js,api.js用于写接口,对axios的封装写在request.js里,项目机构如图: 1. axios统一封装 然后开始统一封装axios, 首先引入axios.qs依赖,

  • vue中Axios的封装与API接口的管理详解

    如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题,我们所要的说的axios的封装和api接口的统一管理,其实主要目的就是在帮助我们简化代码和利于后期的更新维护. 一.axios的封装 在vue项目中,和后台交互获取数据这块,我们通常使用的是axios库,它是基于promise的http库,可运行在浏览器端和node.js中.他有很多优秀的特性,例如拦截请求和响应.取消请求.转换json.客户端防御XSRF等.所以我们的尤大大也是果断放弃了对其官方库vue-reso

  • vue项目中axios请求网络接口封装的示例代码

    每个项目网络请求接口封装都是很重要的一块,第一次做Vue项目,我们的封装方法如下: (1).新建一个js文件,取名api.js (2).引入 axios ,mint-UI ,如下图: import axios from 'axios' import {MessageBox, Toast} from 'mint-ui' axios.defaults.timeout = 50000//默认请求超时时间 axios.defaults.headers = '请求头' (2).封装get方法 export

  • Vue3引入axios封装接口的两种方法实例

    目录 第一种 1.安装 2.新建一个http.js文件 3.使用 第二种 1.安装 2.新建 3.http.js 4.request.js 总结 第一种 1.安装 npm install axios -S 2.新建一个http.js文件 import axios from "axios"; import qs from "qs"; import { Dialog, Toast } from "vant"; // axios.defaults.ba

  • Vue3.0之引入Element-plus ui样式的两种方法

    目录 第一种:CDN 第二种:通过 npm 安装,并希望配合 webpack 使用 安装:官网欢迎star:github npm install element-plus --save 第一种:CDN 目前可以通过 unpkg.com/element-plus 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用.<! – 引入样式 -->< link rel=“stylesheet” href=“https://unpkg.com/element-plus/lib/t

  • 详解vue-cli+es6引入es5写的js(两种方法)

    学习了vue有一段日子了,vue+es6开发非常好用,vue的插件非常多,很充足,但是还是会用到引入第三方外部js的时候,但是很多人在vue-cli中的.vue文件引入es6会出很多错误,因为我们的代码是es6写的,你引入es5的js当然会出问题,那么而接下来我讲大家讲解一波,怎么引入第三方es5写的 js 方法1: import XX from "路径" Vue.use(XX); 这里的js文件要导出 用export default { Vue.proprtypes.aa=funct

  • IOS自带Email的两种方法实例详解

    IOS自带Email的两种方法实例详解 IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. 1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时退出.下面是使用openURL来发邮件的一个小例子: #pr

  • springboot单元测试两种方法实例详解

    这篇文章主要介绍了springboot单元测试两种方法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 springboot的单元测试,这里介绍两种方式,一种是在测试类中添加注解:另一种是在代码中启动项目的main方法中继承接口(也可以写在其他方法中). 如 对查看数据库的连接池信息 进行单元测试 1. 在类上使用注解: @RunWith(SpringRunner.class) @SpringBootTest @RunWith(Sprin

  • Android判断后台服务是否开启的两种方法实例详解

    Android判断后台服务是否开启的两种方法实例详解 最近项目用到后台上传,就开启了一个服务service. 但是刚开始用这种方法,有些机型不支持:酷派不支持.然后又换了第二种判断方法. // public boolean isServiceWork(Context mContext, String serviceName) { // boolean isWork = false; // ActivityManager myAM = (ActivityManager) mContext // .

  • Android 中Popwindow弹出菜单的两种方法实例

    Android 中Popwindow弹出菜单的两种方法实例 1.popWindow就是对话框的一种方式! 此文讲解的android中对话框的一种使用方式,它叫popWindow. 2.popWindow的特性 Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意. AlertDialog是非阻塞线程的,而PopupWindow是阻塞线程的. PopupWindow的位置按照有无偏

  • 详解vue.js下引入百度地图jsApi的两种方法

    前言 今天有个项目需要用到百度地图,一般我们在移动端使用百度地图,都是直接通过这样的方式,直接引入百度地图的jsApi. <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=D9b45bc6f98deafc489e9ac1bc7f7612"></script> 这种方法的原理,就是直接给全局widow对象添加一个BMap对象,从而可以使我们

  • Python生成MD5值的两种方法实例分析

    本文实例讲述了Python生成MD5值的两种方法.分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- import datetime # NO.1 使用MD5 import md5 src = 'this is a md5 test.' m1 = md5.new() m1.update(src) print m1.hexdigest() 运行结果: 174b086fc6358db6154bd951a8947837 # -*- coding:utf-8 -*- # NO

  • DWR3 访问WEB元素的两种方法实例详解

    DWR3访问WEB元素主要有两种方法, 第一种是类似于SpringMVC的用法,直接使用,也就是说在需要使用DWR来远程调用的方法上给一个需要用到的WEB元素作为参数,这个参数在调用该方法的时候不需要用户来传递,当调用该方法的时候系统会自动的给该参数赋值,这时候我们就可以在方法体中自由的使用了! 如: public void test(HttpSession session) { System.out.println(session.getId()); } public void test(St

随机推荐