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 相关文章推荐
js仿百度有啊通栏展示效果实现代码
May 28 Javascript
JS性能优化笔记搜索整理
Aug 21 Javascript
javascript异步编程代码书写规范Promise学习笔记
Feb 11 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
js面向对象之公有、私有、静态属性和方法详解
Apr 17 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
JavaScript中eval()函数用法详解
Dec 14 Javascript
如何判断Javascript对象是否存在的简单实例
May 18 Javascript
AngularJS $injector 依赖注入详解
Sep 14 Javascript
Javascript中 toFixed四舍六入方法
Aug 21 Javascript
解决vue build打包之后首页白屏的问题
Mar 06 Javascript
vue实现井字棋游戏
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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
JavaScript Array扩展实现代码
2009/10/14 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
javascript容错处理代码(屏蔽js错误)
2017/01/20 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
微信小程序canvas实现刮刮乐效果
2018/07/09 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python实现简单字典树的方法
2016/04/29 Python
python常用知识梳理(必看篇)
2017/03/23 Python
Python 错误和异常代码详解
2018/01/29 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
使用placeholder属性设置input文本框的提示信息
2020/02/19 HTML / CSS
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
给面试官的感谢信
2014/02/01 职场文书
家长会主持词
2014/03/26 职场文书
优秀员工推荐信
2014/05/10 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
2015年教师节感言
2015/08/03 职场文书
八年级作文之感恩
2019/11/22 职场文书
使用Redis实现实时排行榜功能
2021/07/02 Redis