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 相关文章推荐
php对mongodb的扩展(小试牛刀)
Nov 11 Javascript
js 固定悬浮效果实现思路代码
Aug 02 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
js前端解决跨域问题的8种方案(最新最全)
Nov 18 Javascript
基于bootstrap的选择框插件icheck
Dec 23 Javascript
angular-ngSanitize模块-$sanitize服务详解
Jun 13 Javascript
使用vue + less 实现简单换肤功能的示例
Feb 21 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
Feb 22 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
May 10 Javascript
JS猜数字游戏实例讲解
Jun 30 Javascript
修改Vue打包后的默认文件名操作
Aug 12 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无法连接mysql数据库的正确解决方法
2016/07/01 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
php实现数组重复数字统计实例
2018/09/30 PHP
js中关于String对象的replace使用详解
2011/05/24 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
2015/12/02 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
javascript实现文字跑马灯效果
2020/06/18 Javascript
[01:02:20]Mineski vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python中__name__的使用实例
2015/04/14 Python
编写Python的web框架中的Model的教程
2015/04/29 Python
详解Python中的各种函数的使用
2015/05/24 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python3控制路由器——使用requests重启极路由.py
2016/05/11 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
使用XML库的方式,实现RPC通信的方法(推荐)
2017/06/14 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
python学习将数据写入文件并保存方法
2020/06/07 Python
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
linux面试题参考答案(9)
2016/01/29 面试题
商务日语专业自荐信
2014/04/17 职场文书
学校工作推荐信范文
2014/07/11 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书