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压缩工具:X2JSCompactor
Jun 13 Javascript
关于延迟加载JavaScript
May 05 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
Jan 14 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 Javascript
Form表单按回车自动提交表单的实现方法
Nov 18 Javascript
详解vue-cli 构建Vue项目遇到的坑
Aug 30 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
vue3自定义dialog、modal组件的方法
Jan 04 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
留言板翻页的实现详解
2006/10/09 PHP
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
Symfony控制层深入详解
2016/03/17 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
2017/06/21 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
python操作mongodb根据_id查询数据的实现方法
2015/05/20 Python
Python 文件管理实例详解
2015/11/10 Python
python实现二分查找算法
2017/09/21 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python简单实现AES加密和解密
2019/03/28 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python实现广度优先搜索过程解析
2019/10/19 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
银行员工职业规划范文
2014/01/21 职场文书
婚前协议书
2014/04/15 职场文书
2014年干部培训工作总结
2014/12/17 职场文书
英文感谢信格式
2015/01/21 职场文书
狮子林导游词
2015/02/03 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP