Vue中封装Axios请求方法
创建目录utils , 在里面创建requests.js文件,写入
import axios from 'axios'
import qs from 'qs';
import {
Message
} from 'element-ui';
// 创建新的axios实例,
const service = axios.create({
// baseURL: process.env.BASE_API,
baseURL: "http://xxxxxxxx.com/api/",
// 超时时间 单位是ms
timeout: 5 * 1000
})
// 请求拦截器
service.interceptors.request.use(config => {
// config.data = JSON.stringify(config.data); //数据转成json格式
config.data = qs.stringify(config.data); //数据转成键值对格式
return config
}, error => {
Promise.reject(error)
})
// 响应拦截器
service.interceptors.response.use(response => {
response.datas = response.data
//接收到响应数据并成功后的一些公共的处理等
response.code = response.data.code
response.msg = response.data.msg
response.data = response.data.data
return response
}, error => {
// 接收到异常响应
if (error && error.response) {
//根据响应嘛处理
switch (error.response.status) {
case 400:
error.message = '错误请求'
break;
case 401:
error.message = '未授权,请重新登录'
break;
case 403:
error.message = '拒绝访问'
break;
case 404:
error.message = '请求错误,未找到该资源'
break;
case 405:
error.message = '请求方法未允许'
break;
case 408:
error.message = '请求超时'
break;
case 500:
error.message = '服务器端出错'
break;
case 501:
error.message = '网络未实现'
break;
case 502:
error.message = '网络错误'
break;
case 503:
error.message = '服务不可用'
break;
case 504:
error.message = '网络超时'
break;
case 505:
error.message = 'http版本不支持该请求'
break;
default:
error.message = `连接错误${error.response.status}`
}
} else {
// 超时处理
if (JSON.stringify(error).includes('timeout')) {
// Message.error('服务器响应超时,请刷新当前页')
}
error.message = '服务器错误!'
}
Message.error(error.message)
return Promise.resolve(error.response)
})
export default service在utils目录中创建http.js文件 , 写入
import requests from './requests'
import {
Message
} from 'element-ui';
const http = {
/**
* methods: 请求
* @param method
* @param url 请求地址
* @param params 请求参数
* @param header 请求头
*/
request(method, url, params, header={
'Content-Type': 'application/x-www-form-urlencoded', //配置请求头
}) {
const config = {
method: method,
url: url,
headers:header
}
//获取AdminToken
const AdminToken = localStorage.getItem("AdminToken");
if (AdminToken != null) {
config.headers.AdminToken = AdminToken; //AdminToken携带在请求头中
}
if (params) {
if (method == 'post') {
config.data = params
} else {
config.params = params
}
}
return requests(config)
},
/**
* 对返回数据进行处理
* @param {object} request 请求对象
* @param {function} successFun 返回状态码 code== 200的回调方法
* @param {function} errorFun 返回状态码 code!= 200的回调方法
*/
resHandle(request,successFun=false,errorFun=false){
request.then((response) => {
if(response){
if (response.code == 200) {
if(successFun){
successFun(response)
}
}else if(response.code == 501){
localStorage.removeItem("AdminToken")
localStorage.removeItem("AdminUser")
} else {
Message.error({
duration:1000,
message:response.msg,
onClose:function(){
if(errorFun){
errorFun(response)
}
}
});
}
}
})
}
}
export default http封装Api接口方法 , 封装的api文件放在api目录下
AdminUserApi.js接口方法
import http from '../utils/http'
export function list(params,successFun,errorFun) {
http.resHandle(http.request('post', 'adminuser/list', params), successFun, errorFun);
}
export function create(params,successFun,errorFun) {
http.resHandle(http.request('post', 'adminuser/create', params), successFun, errorFun);
}
export function update(params,successFun,errorFun) {
http.resHandle(http.request('post', 'adminuser/update', params), successFun, errorFun);
}
export function findform(params,successFun,errorFun) {
http.resHandle(http.request('post', 'adminuser/findform', params), successFun, errorFun);
}
export function del(params,successFun,errorFun) {
http.resHandle(http.request('post', 'adminuser/delete', params), successFun, errorFun);
}在.vue文件中可直接import引入封装的接口方法进行调用 , 也可以注册一个容器变量进行动态require加载对应接口文件来调用方法
在api目录中创建Api.js
//api容器
//require 值拷贝 直接调用
const Api = {
newApi(path){
return require('./'+path+'Api')//传入参数可以为相对路径或者绝对路径
}
}
export default Api在main.js引入Api.js , 注册$Api全局变量

绑定对应接口文件

调用接口方法
//添加
this.$bind.AdminUser.create(this.ruleForm,function(res){
thas.FormSubmitNotify(res,formName)
})
//更新
this.$bind.AdminUser.update(this.ruleForm,function(res){
thas.FormSubmitNotify(res)
})
//删除
this.$bind.AdminUser.del({
id:row.id
},function(res){
thas.$notify({
type: 'success',
title: '提示',
duration:1500,
message:res.msg,
onClose:function(){
thas.tableData.splice(index,1)
}
})
})
//查询
this.$bind.AdminUser.findform({id:this.userid},function(res){
if(res.data.isEdit){
thas.ruleForm = res.data
}else{
thas.ruleForm.role = res.data.role
}
})-------------本文结束感谢您的阅读-------------
