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 相关文章推荐
SWFObject Flash js调用类
Jul 08 Javascript
jQuery下通过$.browser来判断浏览器.
Apr 05 Javascript
使用javascript获取flash加载的百分比的实现代码
May 25 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
Jun 11 Javascript
学习JavaScript编程语言的8张思维导图分享
Mar 27 Javascript
jquery的幻灯片图片切换效果代码分享
Sep 07 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
JS 对java返回的json格式的数据处理方法
Dec 05 Javascript
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
Angular ElementRef简介及其使用
Oct 01 Javascript
微信小程序实现抖音播放效果的实例代码
Apr 11 Javascript
微信小程序 根据不同用户切换不同TabBar
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分页函数
2006/07/08 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
Yii调试SQL的常用方法
2014/07/09 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jquery DIV撑大让滚动条滚到最底部代码
2013/06/06 Javascript
javascript面向对象程序设计(一)
2015/01/29 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
小程序如何定位所在城市及发起周边搜索
2020/02/11 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python中获取对象信息的方法
2015/04/27 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
基于python实现对文件进行切分行
2020/04/26 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
Django怎么在admin后台注册数据库表
2020/11/14 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
践行党的群众路线心得体会
2014/11/05 职场文书
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
python双向链表实例详解
2022/05/25 Python