在vue项目中,每次和后台交互的时候,经常用到的就是axios请求数据,它是基于promise的http库,可运行在浏览器端和node.js中。当项目越来越大的时候,接口的请求也会越来越多,怎么去管理这些接口?多人合作怎么处理?只有合理的规划,才能方便往后的维护以及修改,

安装

安装axios依赖包

cnpm install axios --save

引入

一般会我会在项目src中新建一个untils目录,其中base用于管理接口域名,http处理请求拦截和响应拦截,user.js负责接口文件(接口文件可以自己新建一个文件夹,然后放对应的接口文件)

1.在http.js文件中,用于处理axios中对请求拦截和响应拦截做处理,token处理,并引入element-ui加载动画。

import axios from 'axios'
import { Loading, Message } from 'element-ui'
import router from '../router/index.js' let loading function startLoading() {
loading = Loading.service({
lock: true,
text: '加载中....',
background: 'rgba(0, 0, 0, 0.7)'
})
} function endLoading() {
loading.close()
} // 请求拦截
axios.interceptors.request.use(
(confing) => {
startLoading() //设置请求头
if (localStorage.eToken) {
confing.headers.Authorization = localStorage.eToken
} return confing
},
(error) => {
return Promise.reject(error)
}
) //响应拦截 axios.interceptors.response.use(
(response) => {
endLoading()
return response
},
(error) => {
Message.error(error.response.data)
endLoading() // 获取状态码
const { status } = error.response if (status === 401) {
Message.error('请重新登录')
//清楚token
localStorage.removeItem('eToken')
//跳转到登录页面
router.push('/login')
}
return Promise.reject(error)
}
)
export default axios

通过创建一个axios实例然后export default方法导出,这样使用起来更灵活一些。

2.在base.js文件中,用于管理我们请求接口的域名,极大的方便后期的维护和开发,如果以后更改域名地址或者增加域名,只需要修改这样就可以了、

//域名统一管理

const base = {
url: 'http://localhost:5001/api'
}
export default base

3.接口统一管理,每一个js文件都对应一个功能请求接口管理,在下面实现get,post的实例请求,并且引入qs序列化的处理,使用之前先安装qs

安装qs
cnpm install qs --save

  3.1:更加模块化管理

  3.2:更方便多人开发,有效减少解决命名冲突

  3.3:处理接口域名有多个情况

import axios from '../untils/http'
import QS from 'qs'
import base from './base' /**
* post方法,对应post请求
* @desc注册请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function userRejister(data) {
return axios({
url: `${base.url}/users/register`,
method: 'post',
data: QS.stringify(data)
})
}
/**
* get方法,对应get请求
* @desc登录请求
* @param {String} url [请求的url地址]
* @param {Object} params [请求时携带的参数]
*/
export function userInfo() {
return axios({
url: `${base.url}/profile/all`,
method: 'get'
})
}

4.使用。以上工作做完之后,只需要在我们需要发送请求接口的文件,引入

本实例中引入案例
import { userRejister} from "../../untils/user.js";

发送请求axios请求

async submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
//发送请求return new Promise((resolve, reject) => {
userRejister(this.registerUser)
.then(response => {
console.log(response);
resolve();
})
.catch(error => {
reject(error);
});
});
} else {
console.log("error submit!!");
return false;
}
});
},

以上都是这篇文章所有的说明,如果喜欢,可以多多关注一下

vue axios封装以及API统一管理的更多相关文章

  1. vue Axios 封装与配置项

    import axios from "axios"; import qs from "qs"; import { Message } from "el ...

  2. vue axios 封装(二)

    封装二: http.js import axios from 'axios' import storeHelper from './localstorageHelper' // 全局设置 const ...

  3. vue(axios)封装,content-type由application/json转换为application/x-www-form-urlencoded

    现在主流的http请求头的content-type有三种(不讨论xml): application/x-www-form-urlencoded  最常见的提交数据方式,与原生form表单数据一致,在c ...

  4. vue axios封装

    前言: 对第三方库进行二次封装和抽离到统一模块,项目面对自己的模块进行开发.如果有一天更换库,只需要修改自己模块中的代码,无需对整个项目进行重构. 将axios网络请求库封装到network文件下的r ...

  5. Vue axios封装 实现请求响应拦截

    封装 axios.js import axios from 'axios' import { baseURL } from '@/config' class HttpRequest { constru ...

  6. vue axios封装以及登录token过期跳转问题

    Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...

  7. vue axios 封装(三)

    封装三: import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '. ...

  8. vue axios 封装(一)

    封装一: 'use strict' import axios from 'axios' import qs from 'qs' import NProgress from 'nprogress' im ...

  9. API统一管理平台-YApi

    前言:开发过程中,会产生很多接口对接操作,这个时候可能需要一个接口管理平台管理已经开发好的接口方便业务对接. 一.概述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员 ...

随机推荐

  1. [leetcode]11. Container With Most Water存水最多的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  2. (O)WEB:前端网站性能优化(原创)

    *从理论.实战编码.实战调试3个方面学习前端性能优化(包括页面加载时间和页面流畅度): -------------------------------理论----------------------- ...

  3. mybatis电子商务平台b2b2c

    技术解决方案 开发语言: java.j2ee 数据库:mysql JDK支持版本: JDK1.6.JDK1.7.JDK1.8版本 核心技术:分布式.云服务.微服务.服务编排等. 核心架构: 使用Spr ...

  4. nginx的https代理http配置

    http { upstream https2http_proxy{ server 192.168.22.103:80; } server { listen 1443 ssl; server_name ...

  5. xbee无线通讯终端

    无线数传电台支持DIGI全系列无线数传模块,包括有xbee/xbee PRO S1.xbee/xbee PRO S2C.xbee WIFI.xbee PRO S3B.xbee/xbee PRO SX( ...

  6. W5100S芯片特性

    W5100S是一款硬连线TCP / IP嵌入式以太网控制器,可使使用SPI(串行外设接口)和并行系统的嵌入式系统更容易实现互联网连接 W5100S适合需要稳定的Internet Connectivit ...

  7. Linux 第十三天

    十五.shell编程 1.Shell是什么 1)Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动.挂起.停止甚至是编写一 ...

  8. 2019swpuj2ee作业一:C/S,B/S的应用的区别

    1.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网,  ...

  9. Codeforces828 A. Restaurant Tables

    A. Restaurant Tables time limit per test 1 second memory limit per test 256 megabytes input standard ...

  10. python学习第五章

    1.继承 即是一个派生的类(derived class)继承基类(base class)的字段和方法,继承也允许把一个 派生类的对象作为 一个基类 对象对待.通俗来讲就是方便,继承前人的代码,减少工作 ...