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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
JavaScript的Module模式编程深入分析
Aug 13 Javascript
使用JS CSS去除IE链接虚线框的三种方法
Nov 14 Javascript
动态加载脚本提升javascript性能
Feb 24 Javascript
Javascript中的return作用及javascript return关键字用法详解
Nov 05 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
javascript+css3 实现动态按钮菜单特效
Feb 06 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
node和vue实现商城用户地址模块
Dec 05 Javascript
JavaScript遍历数组和对象的元素简单操作示例
Jul 09 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
Apr 21 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
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
Script的加载方法小结
2011/01/12 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
python爬虫用mongodb的理由
2020/07/28 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
计算机软件个人的自荐信范文
2013/12/01 职场文书
期末评语大全
2014/05/04 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
政府四风问题整改措施
2014/10/04 职场文书
逃课打麻将检讨书
2014/10/05 职场文书
查摆问题整改措施
2014/10/24 职场文书
西游记读书笔记
2015/06/25 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书