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跨浏览器显示的file上传控件
Oct 24 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
May 14 Javascript
js实现a标签超链接提交form表单的方法
Jun 24 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
vue中本地静态图片路径写法
Mar 06 Javascript
基于node+vue实现简单的WebSocket聊天功能
Feb 01 Javascript
Js实现粘贴上传图片的原理及示例
Dec 09 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基础之运算符的使用方法
2013/04/28 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
JS操作CSS随机改变网页背景实现思路
2014/03/10 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
JS脚本加载后执行相应回调函数的操作方法
2018/02/28 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:04:02]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第二场 1月24日
2021/03/11 DOTA
Python复制文件操作实例详解
2015/11/10 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
使用css3制作动感导航条示例
2014/01/26 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
电子商务个人自荐信
2013/12/12 职场文书
简历中自我评价范文3则
2013/12/14 职场文书
演讲稿格式
2014/04/30 职场文书
团拜会策划方案
2014/06/07 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
读后感作文评语
2014/12/25 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
Redis中一个String类型引发的惨案
2021/07/25 Redis