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获取电脑分辨率的思路及操作
Nov 22 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
Aug 20 Javascript
如何消除inline-block属性带来的标签间间隙
Mar 31 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
Feb 26 Javascript
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
Aug 13 jQuery
微信小程序 如何保持登录状态
Aug 16 Javascript
vue学习笔记之Vue中css动画原理简单示例
Feb 29 Javascript
Vue文本模糊匹配功能如何实现
Jul 30 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
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中目录,文件操作详谈
2007/03/19 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
destoon实现调用图文新闻的方法
2014/08/21 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
2014/04/29 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
vue2.0基于vue-cli+element-ui制作树形treeTable
2019/04/30 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
2017/05/24 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
python实现音乐下载器
2018/04/15 Python
python生成密码字典的方法
2018/07/06 Python
一百行python代码将图片转成字符画
2021/02/19 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
python str字符串转uuid实例
2020/03/03 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python如何随机生成高强度密码
2020/08/19 Python
利用指针变量实现队列的入队操作
2012/04/07 面试题
大学自我鉴定
2013/12/20 职场文书
房屋转让协议书
2014/04/11 职场文书
销售队伍口号
2014/06/11 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
MySQL下使用Inplace和Online方式创建索引的教程
2021/05/26 MySQL
Spring Boot 排除某个类加载注入IOC的操作
2021/08/02 Java/Android
Java 多态分析
2022/04/26 Java/Android