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 相关文章推荐
javascript内存管理详细解析
Nov 11 Javascript
Vue.js双向绑定操作技巧(初级入门)
Dec 27 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
May 16 Javascript
vue.js将时间戳转化为日期格式的实现代码
Jun 05 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 Javascript
Vue函数式组件的应用实例详解
Aug 30 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
JavaScript中的Proxy对象
Nov 27 Javascript
如何优化vue打包文件过大
Apr 13 Vue.js
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
人族 Terran 魔法与科技
2020/03/14 星际争霸
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php异步多线程swoole用法实例
2014/11/14 PHP
PHP比较运算符的详细介绍
2015/09/29 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
2017/06/13 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
Python的UTC时间转换讲解
2019/02/26 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python中提高pip install速度
2020/02/14 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
Django中ORM的基本使用教程
2020/12/22 Python
HTML5 Canvas实现平移/放缩/旋转deom示例(附截图)
2013/07/04 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
给医务人员表扬信
2014/01/12 职场文书
计划生育宣传标语
2014/06/21 职场文书
庆国庆活动总结
2014/08/28 职场文书