前言: axios 是基于promise的HTTP库,它有多种特性 ,想了解更多请看官网文档,这里我只介绍我做项目时使用到的一种特性:
我是Vue 框架实现一个多人共享博客平台,页面基本功能有登录、注册、注销、分辨页面是否在登录状态等功能,因此在利用Promise对象在底层二次封装一个请求和相应数据状态进行集中判断的axios,对外暴露register/login/longout/getInfo等方法,
- 首先安装axios
npm install axios --save - 在目录src中创建一个helpers目录,里面创建一个request.js 文件,内容为封装二次axios,只要import 引入或设置成windows属性,就可以在任何地方都可以调用request函数了
import axios from 'axios' //文件中引入axios
import { Message } from 'element-ui' //使用element-ui组件实现报错弹窗提示
//设置响应头
axios.defaults.headers.post['Content-Typr'] = 'application/x-www-form-rulencoded'
axios.defaults.baseURL = 'http://xxxx.com'
axios.defaults.withCredentials = true //跨域请求时是否需要凭证
//导出request 函数
export default function request(url,tupe = 'GET',data={}){
//返回一个promise对象
return new Promise((resolve,reject) =>{
//设置一个option对象
let option:{
url,
method:type
}
/*
if(type.tolowerCase() === 'get'){
option.params = data
}else{
option.data = data
}
*/
axios(option).then(res =>{
console.log(res) //通常使用console.log方法看看代码有没有问题
if(res.data.status === 'ok'){
resolve(res.data)
}else{
Message.error(res.data.msg)
reject(res.data)
}
}).catch(err =>{
Message.error('网络异常')
reject({msg:'网络异常'})
})
})
}
3.调用request函数,比如我在src/api目录下目录下创建了关于博客和登录相关的组件:auth.js blog.js
//用户相关的组件auth.js
import request from '@/helpers/request.js'
const URl = {
REGISTER: '/auth/register',
LOGIN: '/auth/login',
LOGOUT: '/auth/logout',
GET_INFO: '/auth'
}
//暴露出一些函数
export default{
register({username,password}){
return request(URL.REGISTER,'POST',{username,password})
},
login({username,password}){
return request(URL.LOGIN,'POST',{username,password})
},
logout(){
return request(URL.LOGOUT)
},
getInfo() {
return request(URL.GET_INFO)
}
}
这这里暴露出的函数可以通过 vuex中的mapActions等属性可以获取到,比如src/login/template.js中可以这样写
import { mapActions } from 'vuex'
export default{
data(){
return {
}
},
methods:{
...mapActions(['login']) //获取上面组件中暴露出的方法
//在事件中可以调用这些方法
onLogin(){
this.login({username: this.username, password: this.password})
.then(()=>{
this.$router.push({path: this.$route.query.redirect || '/'})
})
}
}
}
src/api/blog.js的方法类似,后续的调用爆出来的方法也是类似的,当然也有很多种方法可以获取这些方法.
以上就是我理解的axios库.
遇到的问题及解决方法:就当做是个笔记吧,以免重蹈覆辙.
我也不知道具体什么原因,反正是安装的依赖路径不对
输入以下几行命令重新安装就好了
rm -rf node_modules
npm install
npm install axios --save
网友评论