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

封装axios、环境变量、api解耦、解决跨域、全局组件注入

官网:Axios中文文档 | Axios中文网

安装:npm install axios

axios封装:

// 1. 引入axios
import axios from "axios";
import storage from '@/utils/storage'
// 2. 创建axios实例
const instance = axios.create({baseURL: process.env.VUE_APP_TITLE === '小政生产环境' ? process.env.VUE_APP_BASE_API : '',timeout: 50000
});// 3. 添加请求拦截器
instance.interceptors.request.use(function (config) {config.headers.Authorization = storage.getItem('token') // 这里是携带的token// 在发送请求之前做些什么return config;
}, function (error) {// 对请求错误做些什么return Promise.reject(error);
});// 4. 添加响应拦截器
instance.interceptors.response.use(function (response) {// 对响应数据做点什么return response;
}, function (error) {// 对响应错误做点什么return Promise.reject(error);
});// 5. 抛出去
export default instance;

环境变量:

与src目录同级新建.env.production和.env.development文件

// .env.productionVUE_APP_TITLE = '小政生产环境' // 必须以VUE_APP开头VUE_APP_BASE_API = 'www.baidu.com' // 必须以VUE_APP开头// 然后可以console.log(process.env.VUE_APP_TITLE)打印查看
// .env.developmentVUE_APP_TITLE = '小政开发环境' // 必须以VUE_APP开头VUE_APP_BASE_API = 'www.baidu.com' // 必须以VUE_APP开头// 然后可以console.log(process.env.VUE_APP_TITLE)打印查看

api解耦:

全局写法:

// api/index.jsimport user from './user'export default {...user
}
// api/user.jsimport axios from "@/utils/axios";export default {getUser: (params) => axios.post('/api/v1/login', params)
}
// main.jsimport api from '@/api'/* 注册api */
Vue.use(api)

局部写法:

// api/user.js
import axios from "@/utils/axios";
export function login(data) {return axios({url: '/login',method: 'post',data})
}export function loginUser () {return axios({url: '/user/loginUser',method: 'get'})
}
<template><div>测试接口请求</div>
</template><script>
import { login, loginUser } from '@/api/user.js'
export default {methods: {FetchLoginUser () {loginUser().then(res => {console.log('result:', res);})}}
}
</script><style lang="scss" scoped></style>

 解决跨域:

// vue.config.jsdevServer: {proxy: {// 代理'/api': {target: 'http://xxx.xxx.xx.xxx:xxxx', // 代理的地址changeOrigin: true,pathRewrite: {'^/api': '' // 选择忽略拦截器里面的内容}}}
}

全局组件注入:

与src目录同级新建installComponents

// installComponents/installComponents.js/* 自动化注册组件 */
export default (Vue) => {const requireComponent = require.context(// 其组件目录的相对路径'@/components',// 是否查询其子目录true,// 匹配基础组件文件名的正则表达式/\.(vue|js)$/)/* 这里循环出来的是components下的每一个文件夹 */requireComponent.keys().forEach((path) => {const content = requireComponent(path).default/* 连js后缀名一起注册 */if (content.name) {/* content.name 文件夹名 content文件夹内容 */Vue.component(content.name, content)} else {Vue.use(content)}})
}
// main.js
import installComponents from './installComponents/installComponents'Vue.use(installComponents)

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

相关文章:

  • CDGP|数据治理于企业而言到底有什么用?
  • Java学习教程,从入门到精通,Java数组(Arrays)语法知识点及案例(19)
  • 11.4OpenCV_图像预处理习题02
  • go的template示例
  • 『YOLO』| 断点训练、解决训练中断异常情况
  • MQTT+Disruptor 提高物联网高并发
  • SpringBoot项目集成ONLYOFFICE
  • 用于nodejs的开源违禁词检测工具 JavaScript node-word-detection
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。
  • Linux权限问题(账号切换,权限,粘滞位)
  • el-upload,上传文件,后端提示信息,前端需要再次重新上传(不用重新选择文件)
  • 数字信号处理Python示例(5)使用实指数函数仿真PN结二极管的正向特性
  • ctfshow(89,90,92,93)--PHP特性--intval函数
  • 构建ubuntu22.04.4私有源服务以及配置ubuntu私有源
  • 模块功能的描述方法
  • 【WPF】MatrixTransform类
  • 【C++】继承的理解
  • day50 图论章节刷题Part02(99.岛屿数量 深搜、99.岛屿数量 广搜、100.岛屿的最大面积)
  • 超详细从基准将VMware ESXi 升级到 vSphere 6.7U1教程
  • 华为OD机试 - 打印机队列 - 优先队列(Java 2024 E卷 200分)
  • MatrixOne 助力西安天能替换MySQL+MongoDB+ES打造一体化物联网平台
  • 正则表达式---元字符
  • 数据库Redis篇
  • 在区块链技术中,什么是权益证明(PoS)?
  • Spring Boot——日志介绍和配置
  • Python实现全国岗位招聘信息可视化分析(源码+论文+部署讲解)
  • 【真题笔记】16年系统架构设计师要点总结
  • 2024 CSS保姆级教程二 - BFC详解
  • Knowledge-refined Denoising Network for Robust Recommendation
  • 轴流风机和后倾式风机的安装要求