当前位置: 首页 > news >正文

封装axios及简单应用举例

第一步:具体封装工具:

在项目根目录下创建utils目录,然后在其中创建文件http.js:

// 二次封装axios
import axios from 'axios'// 全局配置
// 根据环境变量区分接口默认地址(前缀)
switch (process.env.NODE_ENV) {case 'prod':axios.defaults.baseURL = 'http:/www.hcshow.online/blog'breakcase 'test':axios.defaults.baseURL = 'http://localhost/blog'breakdefault:// devaxios.defaults.baseURL = 'http://127.0.0.1/blog'
}
// 请求超时时间
axios.defaults.timeout = 6000// CROS跨域是否允许凭证
axios.defaults.withCredentials = true// axios.post默认情况下传递到后台的数据是JSON格式的
// 通过下面方式设置POST请求头,告诉服务器请求主体的数据格式:a=aaaa&b=bbbb
// 需要导入 import qs from 'qs'
// axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
// axios.defaults.transformRequest = data => qs.stringify(data)// 请求拦截器:axios前置拦截
axios.interceptors.request.use(config => { // config指请求对象
// 通过axios请求拦截器添加token,保证拥有获取数据的权限const token = window.localStorage.getItem('token')if (token !== null) {config.headers.Authorization = token}return config
}, error => {// 如果拦截失败返回失败信息return Promise.reject(error)
})//   // 自定义响应成功的HTTP状态码(一般情况下用配置)
// // 设置什么才算成功,什么时候才算失败
// axios.defaults.validateStatus = status => {
//   // 默认大于等200小于300的才算成功
//   return /^(2|3)\d{2}$/.test(status) //设置2和3开头的都算成功
// }// 响应拦截器:axios后置拦截
axios.interceptors.response.use(res => {return res
}, error => {// 请求已发送,只不状态码不是200系列,设置不同状态码的不同处理if (error.response) { // 如果服务器有返回信息switch (error.response.status) {case 401: // 当前请求需要用户登录(一般是未登录)breakcase 403: // 服务器已经理解请求,但是拒绝执行它(一般是TOKEN过期)localStorage.removeItem('token')// 跳转的登录页面breakcase 404: // 请求失败,资源没有找到break}return Promise.reject(error.response)} else { // 如果服务器没有返回信息// 断网处理if (!window.navigator.onLine) {// 网络断开时,让其跳转到其它网页return}return Promise.reject(error)}
})export default axios

如果要使项目能够根据环境变量区分接口默认地址,需要在package.json中进行配置:

"scripts": {"serve": "vue-cli-service serve","comment1": "测试环境","serve:test": "set NODE_ENV=test&&vue-cli-service serve","comment1": "生产环境","serve:prod": "set NODE_ENV=prod&&vue-cli-service serve",
……
},

之后采用npm run serve:test会启动测试环境,此时对应的服务器连接根地址为:http://localhost/blog……

第二步:服务器代码

@GetMapping("/f11")
public String f11(Integer pageNum, Integer pageSize) {return pageNum + " : " + pageSize;
}
@PostMapping("/f21")
public String f21(@RequestBody String param) {return param;
}

第三步:API集中式管理

采用集中式管理API是为了便于管理接口。
在项目根目录下创建目录api,然后依次在其中创建user.js、blog.js、api.js:

  • user.js
import axios from '../utils/http'function login () {return axios.post('/f21', {data: {username: 'zhagnsan',password: '1234'}})
}export default {login
}
  • blog.js
import axios from '../utils/http'function getBlogsWithPage () {return axios.get('/f11', {params: {pageNum: 11,pageSize: 8}})
}export default {getBlogsWithPage
}
  • api.js:用来进行集中导入
// 定义数据请求的唯一入口
import user from './user'
import blog from './blog'export default {user,blog
}

第四步:在main.js文件中全局引入:

import api from './api/api'
Vue.prototype.$api = api

第五步:在vue页面中具体使用:

<template><div class="home"><button @click="getFun">发送get请求</button><button @click="postFun">发送post请求</button></div>
</template><script>export default {methods: {getFun () {this.$api.blog.getBlogsWithPage().then(res => {console.log(res)})},postFun () {this.$api.user.login().then(res => {console.log(res)})}}}
</script>

启动项目测试

http://www.lryc.cn/news/139000.html

相关文章:

  • Django(3)-创建第一个数据模型-ORM映射
  • C++ vector
  • Spring+redis集成redis缓存
  • 聊聊springboot的启动事件
  • jmeter HTTP请求默认值
  • CSS选择器-CSS3属性
  • 线性代数的学习和整理8:行列式相关
  • java+springboot+mysql农业园区管理系统
  • IDEA远程开发
  • Redis 工作总结
  • GO学习之 数据库(Redis)
  • 谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制
  • User Java bean的命名规范
  • ajax和fetch的区别
  • java+springboot+mysql村务档案管理系统
  • windows查看/删除DNS缓存
  • 自动化测试之Junit
  • Spring Boot 整合MyBatis-Plus
  • CC++ 常用技巧
  • 【AndroidStudio】屏蔽小米打印
  • Tomcat的安装与介绍
  • 说点大实话丨知名技术博主 Kirito 测评云原生网关
  • 时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测
  • 简述docker的网络模式
  • MySql-8.0.34 CentOS 安装命令记录
  • 开发电子木鱼功德+1需要多少钱
  • 批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示
  • LA@向量组间的表示关系
  • Mybatis与Spring集成
  • AMBA总线协议(0)——目录与传送门