热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用async和await封装vue中的http请求

2019独角兽企业重金招聘Python工程师标准实际需求中经常会碰到想异步请求代码写的像同步一样简洁,解决回调地狱,这是最近封装的一个。impor

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

  • 实际需求中经常会碰到想异步请求代码写的像同步一样简洁,解决回调地狱,这是最近封装的一个。

// import qs from 'qs';
import axios from 'axios'
import utils from './util'
import { Toast, Dialog } from 'mand-mobile'
import store from '@/store'
import config from '../config/index'let baseUrl = config.baseUrl // 设置你的baseUrlconst CancelToken = axios.CancelToken
const source = CancelToken.source()
// 设置token
function setToken () {if (utils.local.get('token')) {axios.defaults.headers.common['token'] = utils.getLocal('token');}
}// 请求验证拦截器
axios.interceptors.request.use(config => {// Toast是示例代码,实际需要根据自己的编写// Toast.loading('加载中...')return config
})
axios.interceptors.response.use(res => {// 此段为公司的业务代码,可根据自己的实际情况编写// Toast.hide()// const code = res.data.error_code// const msg = res.data.error_msg// if (code !== '0000') {// if (code == '1001') {// location.href = '/#/login'// } else {// Dialog.confirm({// title: '提示',// content: msg,// confirmText: '确定',// onConfirm: () => console.log('[Dialog.confirm] confirm clicked'),// })// }// }return res.data
})//封装请求方法
function formatReq(type, url, data) {const tempObj = new FormData()for(let i in data) {tempObj.append(i, data[i])}tempObj.append('token', store.state.token)setToken()return new Promise((reslove, reject) => {axios({method: type,url: `${baseUrl}${url}`,// headers: {// //这里的请求头与后台商量设置// // 'content-Type': 'application/x-www-form-urlencoded'// 'content-Type': 'application/x-www-from-urlencoded'// },cancelToken: source.token,// data: qs.stringify(data) //java后台用qs转// data:JSON.stringify(data)//PHP后台用JSON转data: tempObj//PHP后台用JSON转}).then(r => {// store.commit('UPDATE_LOADING', false); //隐藏loading//这里可以添加指定对应状态码的处理方式,比如登陆过期,res.data.code === '6666' 路由跳转到loginreslove(r);}).catch(e => {// store.commit('UPDATE_LOADING', false); //隐藏loadingreject(e.message);});});
}const Http = {get: (url, query) => {url = utils.formatUrl(url, query)setToken();return axios.get(`${baseUrl}${url}`, { cancelToken: source.token }).then(r => r);},post: (url, data) => formatReq('post', url, data),put: (url, data) => formatReq('put', url, data),patch: (url, data) => formatReq('patch', url, data),delete: (url, data) => formatReq('delete', url, data)
};export default Http;//处理get请求,传入参数对象拼接
// let formatUrl = (url, obj) => {
// let params = Object.values(obj).reduce((a, b, i) => `${a}${Object.keys(obj)[i]}=${b}&`, '?');
// return `${url}${params.substring(0, params.length - 1)}`;
// };// 使用示例
// methods: {
// async login() {
// let loginInfo = await this.http.post('/api/login/doLogin', this.loginInfo)
// const token = loginInfo.data.token
// // 提交mutation 保存token
// this.$store.commit('updateToken', token)
// this.COOKIE.set('token', token)
// Toast.succeed('登录成功')
// setTimeout(() => {
// this.$router.push('/')
// }, 300)
// }
// }


转:https://my.oschina.net/chinahufei/blog/3027742



推荐阅读
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 延迟注入工具(python)的SQL脚本
    本文介绍了一个延迟注入工具(python)的SQL脚本,包括使用urllib2、time、socket、threading、requests等模块实现延迟注入的方法。该工具可以通过构造特定的URL来进行注入测试,并通过延迟时间来判断注入是否成功。 ... [详细]
  • python限制递归次数(python最大公约数递归)
    本文目录一览:1、python为什么要进行递归限制 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
author-avatar
潘泓浩_236
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有