vue实践---根据不同环境,自动转换请求的url地址操作


Posted in Javascript onSeptember 21, 2020

一般的项目环境分为:本地环境,测试环境,预发环境,正式环境。 这些环境的域名一般是一样的, 前端请求接口的url也会随着这些环境的变化而改变,手动修改有点麻烦,所以想个办法,让请求的地址根据域名改变而改变。

第一步:

建立一个RequestConfig.js 作为配置文件,内容如下:

const APIMapping = {
 project1: {
  test: 'http://123.com',
  local: 'http://abc.com'
 },
 project2: {
  test: 'http://123.com',
  local: 'http://abc.com'
 }
 }
const currentEnvMapping = {
 '127.0.0.1': 'test',
 'localhost': 'local',
}
export { currentEnvMapping, APIMapping }

这里只列举了测试环境,和本地环境,其他环境使用方法一样。

APIMapping是所有的项目,这里有 project1,project2 ;每个项目分为本地环境(test),测试环境(local);

currentEnvMapping 指明什么域名下使用本地环境的域名,还是测试环境的域名。

第二步

使用vuex, 建立一个store文件存放vuex, 然后再建立index.js存放数据:

import Vue from 'vue'
import Vuex from 'vuex'
import { APIMapping, currentEnvMapping } from './../common/RequestConfig.js'

Vue.use(Vuex)
const state = {
// 这里currentEnvMapping[location.hostname]确定是test, 还是local环境

// APIMapping['project1']确定了是哪个项目

// APIMapping['project1'][currentEnvMapping][location.hostname]最终确定了url


 RequestHost: APIMapping['project1'][currentEnvMapping[location.hostname]]
}

const getters = {
 get_RequestHost: state => {
 return state.RequestHost
 }
}

export default new Vuex.Store({
 state,
 getters
})

第三步

就可以使用了,跟正常的vue一样,代码如下:

mounted(){
 console.log(this.$store.getters.get_RequestHost)
 }

具体的代码看这里: https://github.com/YalongYan/vue-practice/tree/master/dynamic-request

补充知识:vue-cli项目生产环境和开发环境请求接口配置,不用手动切换,自动切换地址的问题

1、在dev.env.js文件中添加配置(开发环境):

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
 NODE_ENV: '"development"',
 url_api: '"api"' // 添加的请求接口,键值都可以自定义,
})

2、在prod.env.js文件中添加配置(生产环境):

'use strict'
module.exports = {
 NODE_ENV: '"production"',
 url_api: '"http://192.168.0.30/server-carApp/"' // 添加的键值对,键开发和生成环境要保持一致,值是打包后上线的地址
}

3、在axios请求文件中,通过process.env.url_api就可以拿到请求的根接口,

我的请求文件中的设置:

const service = axios.create({
 baseURL: process.env.url_api, // 通过process.env.url_api拿到请求的地址
 withCredentials: true,
 timeout: 60 * 1000 
})

我之所以在开发环境中配置url_api的值为api,是因为我在config/index.js中配置的跨域代理写的是api,

config下的index.js文件中关于跨域代理的配置

module.exports = {
 dev: {

 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 proxyTable: {
  '/api': {
  target: 'http://192.168.0.30/server-carApp/', // 后台接口
  changeOrigin: true, // 是否开启跨域
  // secure: false, // 如果是https接口,需要配置这个
  pathRewrite: {
   '^/api': ''
  }
  }
 },
 。。。。。。

4、同样的,在具体的.vue组件文件中,也可以通过process.env.url_api拿到根api接口地址,然后可以用字符串拼接,得到想要的完整url请求地址。

例如,在login.vue文件中,有一个图片验证码的地址,

<template>
<img :src="codeImgSrc" alt="图片验证码"/>
</template>
<script>
// 这样根路径就被引入进来了,不用在打包上线的时候在具体的文件中改资源路径
const imgUlr = process.env.url_api + '/main/validate/qrCode?w=300&h=80'
export default {
name: 'Login',
 data() {
 return {
 codeImgSrc: imgUlr,
 }
 }
}
</script>

以上这篇vue实践---根据不同环境,自动转换请求的url地址操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
打开新窗口关闭当前页面不弹出关闭提示js代码
Mar 18 Javascript
基于jquery和svg实现超炫酷的动画特效
Dec 09 Javascript
jquery实现邮箱自动填充提示功能
Nov 17 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
AngularJS自定义指令之复制指令实现方法
May 18 Javascript
基于jQuery封装的分页组件
Jun 26 jQuery
easyui datagrid 表格中操作栏 按钮图标不显示的解决方法
Jul 27 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
vue两组件间值传递 $router.push实现方法
May 15 Javascript
vue项目或网页上实现文字转换成语音播放功能
Jun 09 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 #Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 #Javascript
微信小程序实现翻牌抽奖动画
Sep 21 #Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 #Javascript
微信小程序实现转盘抽奖
Sep 21 #Javascript
结合axios对项目中的api请求进行封装操作
Sep 21 #Javascript
微信小程序实现打卡签到页面
Sep 21 #Javascript
You might like
PHP iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
子页向父页传值示例
2013/11/27 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
记录一次websocket封装的过程
2020/11/23 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python try except finally资源回收的实现
2021/01/25 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
劳资员岗位职责
2013/11/11 职场文书
市场营销专业个人求职信范文
2013/12/14 职场文书
不服从上级领导安排的检讨书
2014/09/14 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
学前班教学反思
2016/02/24 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书