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创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
Window.Open打开窗体和if嵌套代码
Apr 15 Javascript
Web 开发中Ajax的Session 超时处理方法
Jan 19 Javascript
bootstrap table操作技巧分享
Feb 15 Javascript
ES6新特性之字符串的扩展实例分析
Apr 01 Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
Jun 26 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
Oct 20 Javascript
ajax请求data遇到的问题分析
Jan 18 Javascript
浅谈PDF.js使用心得
Jun 07 Javascript
Node.js中出现未捕获异常的处理方法
Jun 29 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入门源程序
2006/10/09 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
JavaScript的目的分析
2007/01/05 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
如何通过javascript操作web控件的自定义属性
2013/11/25 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
toString.call()通用的判断数据类型方法示例
2020/08/28 Javascript
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
介绍Python中的文档测试模块
2015/04/28 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
python用户管理系统的实例讲解
2017/12/23 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
FLOS美国官网:意大利高级照明工艺的传奇
2018/08/07 全球购物
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
求职简历中的自我评价分享
2013/12/08 职场文书
中学生英语演讲稿
2014/04/26 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
群众路线领导干部个人对照检查材料(集锦)
2014/09/23 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
技术员个人工作总结
2015/03/03 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
Mysql使用全文索引(FullText index)的实例代码
2022/04/03 MySQL
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
2022/08/14 Servers