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 相关文章推荐
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
裁剪字符串trim()自定义改进版
Apr 10 Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 Javascript
动态加载jquery库的方法
Feb 12 Javascript
使用jQuery调用XML实现无刷新即时聊天
Aug 07 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
Sep 11 Javascript
基于vue-cli配置lib-flexible + rem实现移动端自适应
Dec 26 Javascript
微信小程序如何获取openid及用户信息
Jan 26 Javascript
微信小程序indexOf的替换方法(推荐)
Jan 14 Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 Javascript
js 实现验证码输入框示例详解
Sep 23 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
给多个地址发邮件的类
2006/10/09 PHP
PHP生成HTML静态页面实例代码
2008/08/31 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
Yii框架实现的验证码、登录及退出功能示例
2017/05/20 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
jquery 学习之二 属性(类)
2010/11/25 Javascript
Javascript之this关键字深入解析
2013/11/12 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
详解Vue2.X的路由管理记录之 钩子函数(切割流水线)
2017/05/02 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
Vue中对比scoped css和css module的区别
2018/05/17 Javascript
React 组件间的通信示例
2018/06/14 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
Python中使用ElementTree解析XML示例
2015/06/02 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
vscode调试django项目的方法
2020/08/06 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
编辑求职信样本
2013/12/16 职场文书
会计自荐信范文
2014/03/09 职场文书
运动会开幕式主持词
2014/03/28 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL
详解CSS中postion和opacity及cursor的特性
2022/08/14 HTML / CSS