基于vue2版本框架建立axios网络数据请求的使用
一、框架搭建 --数据请求以及代理
发起请求方法使用axios v0.26.0版本插件库来解决api接口调用
因为这个请求库是使用了Promise实现的一个XHR封装、它可以实现请求和响应(403)拦截,同时可以实现通用配置
1.安装 cnpm i -S axios
vue脚手架的webpack配置:
module.export={ lintOnSave:false, pages:{ index:{ template:'./public.index.html', entry:'./src/index.js' } }, devServer:{ open:true, port:16666, //实现数据请求代理配置 proxy:{ //指定需要代理的请求,不是每一个请求都要代理,所以需要一个代理请求地址 '/apis':{ //代理过后的地址:http://localhost:16666/apis/user/app/code //代理目标=>http://www.shuiyue.info:12600/apis/user/app/code target:'http://www.shuiyue.info:12600', //需要把多余的/apis从地址中匹配掉=>http://www.shuiyue.info:12600/user/app/code pathRewrite:{ //重写地址的规则 '/apis':'' } } } } } //这里写代理服务器的配置以及端口
2.请求接口封装:
在系统中,需要使用async + await 来实现同步代码,但是同步只支持Promise.resolve,基础配置应该是一样的,所以需要一次性配置
然后在使用的时候,就不需要来写这些通用配置
//引入axios import axios from 'axios' //封装一个ajax请求方法 function ajaxFunc(req){ return new Promise(resolve=>{ //可以把动态数据 url 、method、params、data抽取出来 axios.request({ //设置请求地址 url:req.url, method:req.method || 'GET', //是请求的基础地址 //单页面组件请求的地址: //baseURL:'http://www.shuiyue.info:12600', //baseURL:'/apis', //这个请求写好代理服务器 就直接应字段名,http:localhost:16666/apis/user/app/code //请求头 headers:{token:'test token'}, //超时配置 -- 设置请求的最大时长 timeout:5000, //params参数配置 - - 它的参数会自动拼接到url地址上 params:req.params || {}, //data参数 - - 不能在get请求中使用,它是请求体参数 data:req.data || {} //}).then(data=>{ //请求返回的是一个response对象,希望得到数据 //console.log(data.data) //}) }).then(({data})=>{ //可以对response对象进行结构赋值取值 // 返回数据 resolve(data) }).catch(e=>{ console.log('---请求失败') resolve(e) }) }) }) } export default ajaxFunc
在另外文件可以直接引入封装后的axios请求方法
//对所有的登录接口进行封装,只接收参数,然后返回请求结果,所有的接口都应该单独导出 //单独导出一个获取验证码的接口 export function getVdtCodeApi(phone){ //需要返回一个Promise回去 return Ajax({ url:'/user/app/code', //params接收的是一个对象 //params :{phone:phone} params:{phone} }) } //这个文件上只需要写url接口地址后面的然后需要传参这些直接可以提交 //这样对简洁配置文件参数,会方便有助于开发和维护性
在页面组件调用api请求接口: