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 相关文章推荐
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
jquery入门—选择器实现隔行变色实例代码
Jan 04 Javascript
用js判断输入是否为中文的函数
Mar 10 Javascript
javascript自动恢复文本框点击清除后的默认文本
Jan 12 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
May 16 Javascript
JavaScript中常用的验证reg
Oct 13 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
Angular自定义组件实现数据双向数据绑定的实例
Dec 11 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
基于vue和react的spa进行按需加载的实现方法
Sep 29 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
php 文章采集正则代码
2009/12/28 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
md5 16位二进制与32位字符串相互转换示例
2013/12/30 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php实现的用户查询类实例
2015/06/18 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
解决vue项目,npm run build后,报路径错的问题
2020/08/13 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[01:46]TI4西雅图DOTA2前线报道 中国选手抱团调时差
2014/07/08 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python高效编程技巧
2013/01/07 Python
python文件的md5加密方法
2016/04/06 Python
Python模拟百度自动输入搜索功能的实例
2019/02/14 Python
在Tensorflow中实现leakyRelu操作详解(高效)
2020/06/30 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
解决html5中video标签无法播放mp4问题的办法
2017/05/07 HTML / CSS
经理秘书岗位职责
2013/11/14 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
青少年法制教育心得体会
2016/01/14 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书