博客列表 >vue2接口环境配置

vue2接口环境配置

阿杰
阿杰原创
2023年02月20日 10:12:20420浏览

前言

vue项目开发,会经历本地测试、打包、生产过程,其中不同阶段需要调试的api接口环境不同,要根据具体来设置。其实主要就是两个方面,配置‘本地运行’和‘打包运行’的api接口环境。

vue2项目的配置

  • vue2项目根目录下的config文件就是配置环境的,
  • 本地运行
    config/dev.env.js文件在本地运行时读取的
  • 打包运行
    config/prod.env.js文件在执行打包命令时读取的

(1)创建文件src/utils/baseURL.js

  1. module.exports={
  2. local:'我是本地环境', //本地环境(一般是连接后端主机ip进行本地调试)
  3. development:'我是开发环境', // 开发环境(一般是连接测试服务器ip地址)
  4. baseURL:'我是生产环境', //生产环境(一般是线上正式发版的ip地址)
  5. otherUrl:'我是其他环境' // 其他环境(其他请求ip地址)
  6. }

(2)找到package.json,修改scripts属性对象

  • 修改前
  1. "scripts": {
  2. "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  3. "start": "npm run dev",
  4. "build": "node build/build.js"
  5. },
  • 修改后
  1. "scripts": {
  2. "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
  3. "dev_test": "webpack-dev-server --inline --progress --env=test --config build/webpack.dev.conf.js",
  4. "dev_prod": "webpack-dev-server --inline --progress --env=prod --config build/webpack.dev.conf.js",
  5. "start": "npm run dev",
  6. "build": "node build/build.js"
  7. },

(3)修改config/dev.env.js

  1. 'use strict'
  2. const merge = require('webpack-merge')
  3. const prodEnv = require('./prod.env')
  4. const URL = require('../src/utils/baseURL.js')
  5. let params = process.argv[4]
  6. let baseUrl = ''
  7. let environment = null
  8. switch(params){
  9. // 本地环境
  10. case '--config':
  11. environment = "'本地环境'"
  12. baseUrl = `"${URL.local}"`
  13. break
  14. // 开发环境
  15. case '--env=test':
  16. environment = "'开发环境'"
  17. baseUrl = `"${URL.development}"`
  18. break
  19. // 生产环境
  20. case '--env=prod':
  21. environment = "'生产环境'"
  22. baseUrl = `"${URL.baseURL}"`
  23. break
  24. // 其他
  25. default:
  26. environment = "'其他'"
  27. baseUrl = `"${URL.otherUrl}"`
  28. }
  29. // 本地开发
  30. module.exports = merge(prodEnv, {
  31. NODE_ENV: '"development"',
  32. baseUrl:baseUrl,
  33. local:true,
  34. environment:environment
  35. })

(4)修改config/prod.env.js

  1. 'use strict'
  2. const merge = require('webpack-merge')
  3. const prodEnv = require('./prod.env')
  4. const URL = require('../src/utils/baseURL.js')
  5. let params = process.argv[2]
  6. let baseUrl = ''
  7. let environment = null
  8. switch(params){
  9. // 本地环境
  10. case '--inline':
  11. environment = "'本地环境'"
  12. baseUrl = `"${URL.local}"`
  13. break
  14. // 开发环境
  15. case 'test':
  16. environment = "'开发环境'"
  17. baseUrl = `"${URL.development}"`
  18. break
  19. // 生产环境
  20. case 'prod':
  21. environment = "'生产环境'"
  22. baseUrl = `"${URL.baseURL}"`
  23. break
  24. // 其他
  25. default:
  26. environment = "'其他'"
  27. baseUrl = `"${URL.otherUrl}"`
  28. }
  29. // 打包环境
  30. module.exports = merge(prodEnv, {
  31. NODE_ENV: '"production"',
  32. baseUrl:baseUrl,
  33. local:false,
  34. environment:environment
  35. })

(5)main.js获取环境并且注册挂载vue原型上

  1. // 注册全局域名接口调用
  2. Vue.prototype.$baseUrl = process.env.baseUrl
  3. // 注册当前运行或者打包的是什么环境下的
  4. Vue.prototype.$Environment = process.env.environment

完成以上

本地项目启动命令使用:npm run dev,npm run dev_test、npm run dev_prod

打包环境命令使用:npm run build,npm run build test、npm run build prod

提示:process.env.baseUrl和process.env.environment变量可以在任意页面和组件中使用和访问

console.log( process.env.environment) // 获取当前是什么开发环境

可以通过process.env.local 布尔值来判断 当前是本地开发访问 还是线上访问,可以对请求封装和反向代理做一些区别和逻辑

封装api请求

  • 根据不同环境切换接口域名
  1. // 配置请求基本信息(详见文档 | 这里只做了简单的配置)
  2. // baseurl / 超时时间(5秒) /
  3. if(process.env.NODE_ENV=='development'&&process.env.environment=='本地环境'){
  4. axios.defaults.baseURL = '/my'
  5. }else{
  6. axios.defaults.baseURL = process.env.baseUrl
  7. }
  • utils文件夹下创建http.js
  1. // axios
  2. import axios from 'axios'
  3. // 获取token
  4. var token = localStorage.getItem('Token')
  5. // 配置请求基本信息(详见文档 | 这里只做了简单的配置)
  6. // baseurl / 超时时间(5秒) /
  7. if(process.env.NODE_ENV=='development'&&process.env.environment=='本地环境'){
  8. axios.defaults.baseURL = '/my'
  9. }else{
  10. axios.defaults.baseURL = process.env.baseUrl
  11. }
  12. // axios.defaults.baseURL = ''
  13. axios.defaults.timeout = 7000
  14. /**
  15. * POST - 请求封装
  16. * @param url
  17. * @param data
  18. * @returns Promise
  19. */
  20. export function post(url, data = {}){
  21. // headers(携带token)
  22. axios.defaults.headers.common['token'] = token;
  23. // data 公共参数设置(例如token)
  24. // 如果你的服务端接口没有规定则不需要以下操作
  25. // [每次请求接口 data 数据必须携带的参数]
  26. // data.uid = uid
  27. // data.token = token
  28. // data.model = 'Browser'
  29. // data.platform = 'H5'
  30. return new Promise((resolve, reject) => {
  31. axios.post(url, data,{
  32. headers: {
  33. 'content-type': 'application/x-www-form-urlencoded',
  34. }
  35. })
  36. // 请求成功回调
  37. .then(response => {
  38. // 拿到结果先对状态码进行对应处理(调用下方函数)
  39. // 传入状态码给处理函数即可(code)
  40. serveCode(response.data.code,response.data.message)
  41. // ok(正常返回)
  42. resolve(response.data);
  43. },
  44. // 请求失败回调
  45. err => {
  46. // 请求失败后(做一个弹出框提示用户)
  47. // 当然也可以做其他操作
  48. alert(err.message)
  49. reject(err)
  50. })
  51. })
  52. }
  53. /**
  54. * GET - 请求封装(与POST请求一样 | axios.get)
  55. * @param url
  56. * @param data
  57. * @returns Promise
  58. */
  59. // ...
  60. export function get(url, data = {}){
  61. // headers(携带token)
  62. axios.defaults.headers.common['token'] = token;
  63. // data 公共参数设置(例如token)
  64. // 如果你的服务端接口没有规定则不需要以下操作
  65. // [每次请求接口 data 数据必须携带的参数]
  66. // data.uid = uid
  67. // data.token = token
  68. // data.model = 'Browser'
  69. // data.platform = 'H5'
  70. return new Promise((resolve, reject) => {
  71. axios({
  72. method: 'get',
  73. url: url,
  74. params: data,
  75. })
  76. // 请求成功回调
  77. .then(response => {
  78. // 拿到结果先对状态码进行对应处理(调用下方函数)
  79. // 传入状态码给处理函数即可(code)
  80. serveCode(response.data.code,response.data.message)
  81. // ok(正常返回)
  82. resolve(response.data);
  83. },
  84. // 请求失败回调
  85. err => {
  86. // 请求失败后(做一个弹出框提示用户)
  87. // 当然也可以做其他操作
  88. alert(err.message)
  89. reject(err)
  90. })
  91. })
  92. }
  93. /**
  94. * DELETE - 请求封装(与POST请求一样 | axios.delete)
  95. * @param url
  96. * @param data
  97. * @returns Promise
  98. */
  99. // ...
  100. /**
  101. * 状态码处理
  102. * @param {Number} code - 状态码
  103. * @return void
  104. */
  105. function serveCode(code,message) {
  106. switch(code){
  107. // 无权限访问,请尝试重新登录
  108. case 1001 :
  109. // elementUI 提示框
  110. MessageBox.alert('为了您的账号安全,请重新登录系统', '登录已过期', {
  111. type: 'error',
  112. confirmButtonText: '我知道了',
  113. showClose: false,
  114. center: true
  115. })
  116. // 用户点击确认框
  117. .then(() => {
  118. // 做一些事情...
  119. // 例如登录已经过期了(清除缓存)
  120. // localStorage.removeItem('token')
  121. // localStorage.removeItem('uid')
  122. // 最后跳转到登录页
  123. // router.push('/login')
  124. })
  125. break;
  126. case 400 :
  127. // elementUI 提示框
  128. Message({
  129. showClose: true,
  130. duration: '2000',
  131. message: message,
  132. type: 'error'
  133. })
  134. break;
  135. // 其他状态码情况处理
  136. // ...
  137. }
  138. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议