随著 vuejs 译者尤雨溪正式发布最新消息,无须竭尽全力保护vue-resource,并所推荐我们采用 axios 已经开始,axios 被愈来愈多的人所介绍。axios 是两个如前所述Promise 用作应用程序和 nodejs 的 HTTP 应用程序,它这类具备下列特点:
1、从应用程序中建立 XMLHttpRequest
2、从 node.js 发出 http 允诺
3、全力支持 Promise API
4、截击允诺和积极响应
5、转换允诺和积极响应统计数据
6、中止允诺
7、手动切换JSON统计数据
一、即其vue-后端和后端可视化的库采用Axios
Axios 是两个如前所述 Promise 的 HTTP 库即其vue的PCB等标识符方向是
/src/utils/request.js二、request.js标识符导出
1.包导入表明
axios:导入axios模块,同时实现HTTP库,后端和后端采用http+json的形式做传输
importaxiosfrom axios import { Notification, MessageBox, Message, Loading } from element-ui //导入element-ui架构的模块,比如Loading模块,在网络允诺中,界面显示加载的图标 import store from @/store //导入本地存储PCB,可以将返回的统计数据存储到本地 import { getToken } from @/utils/auth //权限认证,登陆成功后,将token存储到本地, import errorCode from @/utils/errorCode //错误编码PCB import{ tansParams, blobValidate }from “@/utils/ruoyi”; //工具类,参数验证PCB import cache from @/plugins/cache //缓存模块 import { saveAs } from file-saver //文件保存2.建立实例
后端服务url地址配置在测试环境:.env.development,生产环境.env.production
axios建立实列需要传入后端服务接口的url和超时时间,初始化成功后,可以采用service变量进行统计数据发送
const service = axios.create({ // axios中允诺配置有baseURL选项,表示允诺URL公共部分baseURL: process.env.VUE_APP_BASE_API,// 超时 timeout: 10000 })3.允诺和积极响应截击
允诺截击是指在发送前,需要将公共的参数进行设置,比如token的设置,防止多次重发,请求头的编码等
如下是允诺截击的标识符片段
// request截击器 service.interceptors.request.use(config => { // 是否需要设置 token constisToken = (config.headers || {}).isToken ===false // 是否需要防止统计数据重复提交 constisRepeatSubmit = (config.headers || {}).repeatSubmit ===false if (getToken() && !isToken) { config.headers[Authorization] = Bearer + getToken()// 让每个允诺携带自定义token 请根据实际情况自行修改 } // get允诺映射params参数 if (config.method === get && config.params) { leturl = config.url +? + tansParams(config.params); url = url.slice(0, -1); config.params = {}; config.url = url; }if (!isRepeatSubmit && (config.method === post || config.method === put)) { const requestObj = { url: config.url, data: typeof config.data === object ? JSON.stringify(config.data) : config.data, time:new Date().getTime() } const sessionObj = cache.session.getJSON(sessionObj) if (sessionObj === undefined || sessionObj === null || sessionObj === ) { cache.session.setJSON(sessionObj, requestObj) } else { const s_url = sessionObj.url; // 允诺地址 const s_data = sessionObj.data; // 请求统计数据 const s_time = sessionObj.time; // 允诺时间 const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 if(s_data === requestObj.data && requestObj.time – s_time < interval && s_url === requestObj.url) {const message = 统计数据正在处理,请勿重复提交; console.warn(`[${s_url}]: ` + message) return Promise.reject(new Error(message)) } else{ cache.session.setJSON(sessionObj, requestObj) } } } return config }, error => { console.log(error)Promise.reject(error) })积极响应截击是指服务端返回统计数据后,根据http的积极响应码进行判断处理,http积极响应码包含200(成功),401,500,601等,根据每个编码进行特殊处理
Notification是element-ui的模块,在管理界面上面弹出提示信息// 积极响应截击器 service.interceptors.response.use(res =>{// 未设置状态码则默认成功状态 const code = res.data.code || 200; constmsg = errorCode[code] || res.data.msg || errorCode[default] // 二进制统计数据则直接返回 if (res.request.responseType === blob|| res.request.responseType ===arraybuffer) { return res.data } if (code === 401) { if (!isRelogin.show) { isRelogin.show = true; MessageBox.confirm(登录状态已过期,您可以竭尽全力留在该页面,或者重新登录, 系统提示, { confirmButtonText: 重新登录, cancelButtonText: 中止,type: warning }).then(() => { isRelogin.show = false; store.dispatch(LogOut).then(() =>{ location.href =/index; }) }).catch(() => { isRelogin.show = false; }); } return Promise.reject(无效的会话,或者会话已过期,请重新登录。) } else if (code === 500) { Message({ message: msg, type: error }) return Promise.reject(new Error(msg)) } else if (code === 601) { Message({ message: msg, type: warning }) return Promise.reject(error) } else if (code !== 200) { Notification.error({ title: msg }) return Promise.reject(error) } else { return res.data } }, error => { console.log(err + error) let{ message } = error;if (message == “Network Error”) { message = “后端接口连接异常”; } else if (message.includes(“timeout”)) { message = “系统接口允诺超时”; } else if (message.includes(“Request failed with status code”)) { message =“系统接口” + message.substr(message.length – 3) + “异常”; } Message({ message: message,type: error, duration: 5 * 1000 }) return Promise.reject(error) } )二、request.js对外提供服务
在vue开发的过程中,常用到暴露和导入,常见的暴露与导入形式是通过export暴露通过import导入。
将service暴露给其他js文件调用,需要在文件底部增加如下操作
export default service已在知识星球更新源码导出如下: