vue项目接口域名动态获取操作

时间:2021-05-26

需求:

接口域名是从外部 .json 文件里获取的。

思路:

在开始加载项目前 进行接口域名获取,然后重置 接口域名的配置项。

实现:

1、config/index.js 文件 进行基础配置

import axios from 'axios'const config = { requestUrl: 'http://qiniu.eightyin.cn/path.json', //动态域名所在地址 baseUrl: { dev: '/api/', pro: 'http://xxx.com/' // 接口域名,会被动态覆盖 }, requestRemoteIp: () => { // 动态获取 return new Promise((resolve, reject) => { axios.get(config.requestUrl).then(response => { config.baseUrl.pro = response.data.data.path; config.img.domain = config.baseUrl.pro; resolve() }, err => { reject() }); }); }}export default config

2、项目下main.js 文件 进行动态获取

import config from '@/config/index.js'// 读取接口域名config.requestRemoteIp().finally(res => { new Vue({ el: '#app', router, components: { App }, template: '<App/>' })});

3、请求数据

const instance = axios.create({ baseURL: process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro })

补充知识:webpack + vue 打包生成公共配置文件(域名) 方便动态修改

需求原因

原来的项目中域名是打包到项目里面的,打包后不能动态配置,只能通过不同的指令打包来切换域名,每天都在测试域名和正式域名来回摩擦,后台大佬说你们可以生成一个配置文件这样就不用频繁打包了直接修改配置文件就好,于是就有了这篇文章。

第一步 安装插件

npm install --save-dev generate-asset-webpack-plugin

第二步 新建配置文件

在项目的根目录下新建 serverConfig.json 以后会根据这个文件去生成打包的配置文件

{"ProdUrl":"http://text.com"}

第三步 引入generate-asset-webpack-plugin

在build/webpack.prod.conf.js中添加

const GenerateAssetPlugin = require('generate-asset-webpack-plugin');const serverConfig = require('../serverConfig.json');//引入根目录下的配置文件const createJson = function() { return JSON.stringify(serverConfig);};//plugins 中使用 plugins: [ //打包时生成一个配置文件 new GenerateAssetPlugin({ filename: 'serverConfig.json', fn: (compilation, cb) => { cb(null, createJson()); }, }),]

第四步 使用配置文件中的内容

这里根据不同项目不同需求代码自行变换,我分享一下我的项目里的使用。在main.js 中vue实例初始化之前将baseURL存到本地

axios.get('serverConfig.json').then( e => { let baseURL = e.data.ProdUrl localStorage.setItem("baseURL", baseURL); new Vue({ el: '#app', router, store, i18n, render: h => h(App) })})

由于是使用axios获取,是异步方法,根据情况进行处理。、

好了接下来就再也不用为了域名每天build了

打包后的目录

以上这篇vue项目接口域名动态获取操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章