nuxt+axios实现打包后动态修改请求地址的方法


Posted in Javascript onApril 22, 2020

需求:把请求地址等一些配置暴露出来以便打包后动态修改,而不需要重新打包编译。

这样也是挺不错的,当一个项目需要部署到几个不同的服务器上时候,就不用说每次都要修改后再重新打包。功能不变时,单单是修改一下请求地址省了不少功夫。

1.开始

把需要动态修改的配置写在一个配置json文件里面。该配置文件可以放在static目录下:

静态文件目录:静态文件目录 static 用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。 服务器启动的时候,该目录下的文件会映射至应用的根路径 / 下。

2.实现

在static下新建baseConfig.json文件,把需要暴露出来的配置写上,先上代码:

{
 "video_dir": "video/",
 "base_host": "http://xxxxx"
 "request_prefix":'/api/'
}

有需求的可以扩展配置文件(想怎么写就怎么写,开心就行~),例如可以根据不用的环境(开发、生产)切换等;

在plugis文件夹下新建baseConfig.js文件:

import Vue from 'vue';
import axios from 'axios';

const protocolTmp = window.location.protocol; // 获取当前 URL 的协议
const { host } = window.location; // 获取当前host

<!--请求配置信息-->
async function getServerConfig() {
 return new Promise(async (resolve, reject) => {
  await axios.get(`${protocolTmp}//${host}/baseConfig.json`).then((result) => {
   const { base_host,video_dir ,request_prefix} = result.data;
   //把配置挂载在Vue属性上,以便调用
   Vue.prototype.$base_host = base_host;
   Vue.prototype.$request_prefix = request_prefix;
   Vue.prototype.$video_dir = video_dir;
   resolve();
  }).catch((error) => {
   console.log('error', error);
   reject();
  });
 });
}
getServerConfig();

在项目配置文件nuxt.config.js中引入:

plugins: [
  ...
  '~/plugins/pathConfig'
 ],

最后在axios里面配置使用,完事。axios.js :

import Qs from "qs"
import Vue from 'vue';

export default function (e) {
 // e.$axios.defaults.baseURL = 'http://xxxxxxx/api/'
 // e.$axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
   e.$axios.defaults.baseURL = Vue.prototype.$base_host + Vue.prototype.$request_prefix
 
 // request interceptor
 e.$axios.interceptors.request.use(
  config => {
   // do something before request is sent
   if (config.method == 'post') {
    config.data = Qs.stringify(config.data)
   }
   return config
  },
  error => {
   // do something with request error
   return Promise.reject(error)
  }
 )
 // response interceptor
 e.$axios.interceptors.response.use(
  /**
   * Determine the request status by custom code
   * Here is just an example
   * You can also judge the status by HTTP Status Code
   */
  response => {
   const res = response.data
   if (response.status === 200 && res.code == 1000) {
    return res
   } else {
    // redirect('/404')
    // if the custom code is not 200, it is judged as an error.
   }
   return Promise.reject({ code: res.code, msg: res.msg || 'Error' })
  },
  error => {
   console.log('err' + error) // for debug

   return Promise.reject(error)
  }
 )

 e.$axios.onError(error => {
  const code = parseInt(error.response && error.response.status)
  if (code === 400) {
   // redirect('/400')
   console.log('$axios.onError :', error)
  }
 })
}

3. 最后

到此这篇关于nuxt+axios实现打包后动态修改请求地址的方法的文章就介绍到这了,更多相关nuxt+axios 打包后动态修改请求地址内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木! 

Javascript 相关文章推荐
jQuery弹出层插件简化版代码下载
Oct 16 Javascript
JS 对象介绍
Jan 20 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
Nov 04 Javascript
使用Math.floor与Math.random取随机整数的方法详解
May 07 Javascript
JS增加行复制行删除行的实现代码
Nov 09 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
Jan 28 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
浅析BootStrap Treeview的简单使用
Oct 12 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
Mar 01 Javascript
JS脚本实现定时到网站上签到/签退功能
Apr 22 #Javascript
微信小程序实现手指拖动选项排序
Apr 22 #Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 #Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 #Javascript
Vue computed 计算属性代码实例
Apr 22 #Javascript
js 解析 JSON 数据简单示例
Apr 21 #Javascript
react 原生实现头像滚动播放的示例
Apr 21 #Javascript
You might like
封装一个PDO数据库操作类代码
2009/09/09 PHP
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
JS正则验证邮箱的格式详细介绍
2013/11/19 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
Pyecharts地图显示不完成问题解决方案
2020/05/11 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
如何理解Python中包的引入
2020/05/29 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python调用C/C++的方法解析
2020/08/05 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
服装销售人员求职自我评价
2013/09/26 职场文书
九年级政治教学反思
2014/02/06 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
社团活动总结怎么写
2014/06/30 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书