在开发环境和线上环境时,由于环境的不同,有时候需要修改一定的代码,可以通过配置webpack环境来减少对代码的修改;另外,有时候去看别人的代码,你可能都找不到他的数据请求在什么位置,最近在做一个vue的项目,写了一个对axios请求数据的封装和大家分享一下。

  一、运行命令区分webpack环境

  * 首先我们装一下依赖

  npm i cross-env -D

  * 配置项目的package.json文件的scripts

"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js",
"build": "cross-env NODE_ENV=production webpack --config webpack.config.js"
}

  * 配置webpack.config.js的plugins

  这里需要修改两个部分,定义一个isDev

const isDev = process.env.NODE_ENV =='development'

  再去配置plugins

plugins: [ // 添加插件 ---- 数组
new webpack.optimize.UglifyJsPlugin(), // 压缩js文件
new webpack.DefinePlugin({ // ++++++++++++++++++
'process.env': {
NODE_ENV: isDev ? '"development"' : '"production"'
}
}),
new HtmlWebPackPlugin({ // 实例化一个 html 的webpack的插件
template: 'index.html' // 找的就是当前文件夹下的index.html文件
})
]

  二、封装axios

// 1、引入axios模块
import axios from 'axios'; // 2、判断是什么环境 -- 开发环境 -- 生产环境
// 真 ---- 开发环境 ---- 反向代理
// 假 ---- 生产环境
const isDev = process.env.NODE_ENV === 'development' // 3、自定义axios
let request = axios.create({
// 基础的请求地址
baseURL: isDev ? '/api' : 'http://0.0.0.0' // 后面的时线上的地址,可以改为自己的线上接口地址
}) // 4、使用axios的拦截器 ---- 请求的拦截器 + 响应的拦截器 // 添加请求拦截器
request.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
// 所有的请求都需要的字段,所有的请求添加loading效果
// token
config.headers['token'] = localStorage.getItem('token')
return config;
}); // 添加响应拦截器
request.interceptors.response.use(function (response) {
// 对响应数据做点什么
// 消除请求的loading效果
return response;
}); // 5、暴露axios模块
export default request;

  这个时候,我们的axios就封装完毕了,并且把token的验证放在了头信息里,每次请求数据都去验证token。

  可以再去做一件事,这样我们的代码就会显得有A和C之间的格,别人找不到我们在什么地方请求的数据,去封装请求的接口

// 1、引入自定义的axios
import request from './request'; // 2、封装接口 /**
* 封装 数据列表的接口
* pageCode 页面
* limitNum 每页显示个数
*/
const getProlist = (pageCode, limitNum) => {
pageCode = pageCode * 1 || 0;
limitNum = limitNum * 1 || 10;
// 使用promise解决异步问题
return new Promise((resolve) => {
// 因为自定义的axios包含baseUrl,此处只需要写后面的接口即可
request.get('/pro', { params: { pageCode, limitNum} }).then(res => {
resolve(res.data)
})
})
} // 3、暴露接口
export {
getProlist,
getBannerlist
}

  这样,我们在组件中需要请求接口都可以写在我们封装的这个文件中,只需要在需要的地方去引入我们封装的接口,然后调用就可以了。

  以上纯属个人见解,如果有错误的地方,欢迎提出来。

最新文章

  1. 使用ADO连接oracle数据库“未找到提供程序。该程序可能未正确安装”解决方案
  2. Spring MVC Junit4 单元測试 JunitTest
  3. POJ 2299 Ultra-QuickSort 归并排序、二叉排序树,求逆序数
  4. Linux下(主要针对Ubuntu)下桌面分辨率的添加
  5. Cocos2d-X学习之Ref类
  6. HDU 4403 A very hard Aoshu problem(DFS)
  7. 如何让有物理键的手机在ActionBar始终显示更多菜单menu键
  8. javascript里的几种常见的数组方法
  9. js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制
  10. Git Compare with base,比较大文件时,长时间等待,无法加载
  11. IDEA中Git的使用
  12. 从 0 到 1 实现 React 系列 —— 1.JSX 和 Virtual DOM
  13. sql 发送邮件
  14. 对世界首款“人工智能”ERP系统HUE的初步了解 - AI ERP - WAP - 万革始
  15. vue 父组件给子组件传值 Vue父组件给子组件传方法 Vue父组件把整个实例传给子组件
  16. 一个封存Id与状态对应键值的神器,BigInteger的setBit和testBit用法实例
  17. 事后分析报告(Postmortem Report)要求
  18. js检查浏览器是否处于隐身模式
  19. linux下使用crontab创建定时任务
  20. SSH整合不错的博客

热门文章

  1. JZOJ2020年10月5日提高B组反思
  2. charles功能(四) 模拟 接口404/403返回值(blacklist方法)
  3. 第15.46节、PyQt显示部件:OpenGL Widget部件功能简介及使用案例
  4. Python中序列解包与函数的参数收集之间的关系
  5. 爬取网页内容后写入文件报错UnicodeEncodeError: 'gbk' codec can't encode的问题解决方案
  6. PyQt(Python+Qt)学习随笔:model/view架构中类QStandardItemModel的使用方法
  7. PyQt(Python+Qt)学习随笔:Action功能详解及Designer中的操作方法
  8. RedHat操作指令第2篇
  9. (转)MySQL优化原理
  10. C#声明一个100大小的数组 随机生成1-100之间不重复的数