当前位置:   article > 正文

axios调用多个服务器数据在一个vue-cli项目中,而且还要开发和线上不一样。_vue项目 axios.post 后面加不同服务器

vue项目 axios.post 后面加不同服务器

先了解这个  .env.development和 .env.production文件

1,关于文件名:必须以如下方式命名,不要乱起名,也无需专门手动控制加载哪个文件

  .env 全局默认配置文件,不论什么环境都会加载合并

  .env.development 开发环境下的配置文件

  .env.production 生产环境下的配置文件

2,关于内容

  注意:属性名必须以VUE_APP_开头,比如VUE_APP_XXX

一般我们做项目都会用axios的拦截器功能。去做一些配置啊,什么的。比如这样

  1. import axios from 'axios';
  2. // 重点就是这里 取的就是前边提到的.env.development和 .env.production文件
  3. // 取决于环境变量或者说你运行的时候是哪个。
  4. const service = axios.create({
  5. baseURL: process.env.VUE_APP_BASE_API, // api 的 base_url
  6. timeout: 300000 // request timeout
  7. });
  8. service.interceptors.request.use(
  9. config => {
  10. if (!config.headers['X-Token']) {
  11. config.headers['X-Token'] = `${store.getters.token || ''}`;
  12. }
  13. if (!config.headers['language']) {
  14. config.headers['language'] = `${store.getters.language}`;
  15. }
  16. return config;
  17. },
  18. err => Promise.reject(err)
  19. );
  20. // response interceptor
  21. service.interceptors.response.use(
  22. response => {
  23. const res = response.data;
  24. if (res.errno === 5011) {
  25. store.dispatch('FedLogOut');
  26. window.location.reload();
  27. return Promise.reject('error');
  28. }
  29. if (res.errno === 501) {
  30. Toast.fail(I18n.t('requestErrText.pleaseLogin'));
  31. store.dispatch('FedLogOut');
  32. setTimeout(() => {
  33. // window.href = '/login/';
  34. router.push({
  35. name: 'login'
  36. });
  37. }, 1500);
  38. return Promise.reject('error');
  39. } else if (res.errno === 502) {
  40. Toast.fail(I18n.t('requestErrText.insetErr'));
  41. return Promise.reject('error');
  42. }
  43. if (res.errno === 401) {
  44. Toast.fail(I18n.t('requestErrText.paramesErr'));
  45. return Promise.reject('error');
  46. }
  47. if (res.errno === 402) {
  48. Toast.fail(I18n.t('requestErrText.keyErr'));
  49. return Promise.reject('error');
  50. } else if (res.errno !== 0) {
  51. // 非5xx的错误属于业务错误,留给具体页面处理
  52. return Promise.reject(response);
  53. } else {
  54. return response;
  55. }
  56. },
  57. error => {
  58. // console.log('err' + error); // for debug1
  59. // console.log(error.message);
  60. const { code, message } = error;
  61. if (code === 'ECONNABORTED' || message === 'Network Error') {
  62. Toast.clear();
  63. Dialog.alert({
  64. title: I18n.t('requestErrText.warn'),
  65. message: I18n.t('requestErrText.outTime'),
  66. confirmButtonText: I18n.t('requestErrText.retry')
  67. }).then(() => {
  68. // service.request(config);
  69. location.reload();
  70. });
  71. }
  72. // Dialog.alert({
  73. // title: I18n.t('requestErrText.warn'),
  74. // message: I18n.t('requestErrText.outTime')
  75. // }).then(() => {
  76. // store.dispatch('FedLogOut');
  77. // window.location = '#/login/';
  78. // });
  79. return Promise.reject(error);
  80. }
  81. );
  82. export default service;

重点来了。

在.env.development和 .env.production文件加个变量

在.env.development中写开发的地址

VUE_APP_BASE_API_D = 'http://192.168.5.76:8090/'

在.env.production 中写线上的地址

VUE_APP_BASE_API_D = 'http:/268.123.43.22:8090/'

记住变量要一样。

然后再写一个一定是再写一个axios的封装函数。

至少两个服务器的请求头也不会一样,处理方式也不一样,错误处理也有可能不一样。要是一样也不用两三个服务器取干了。

再封装的函数改重点改这里

  1. const service = axios.create({
  2. baseURL: process.env.VUE_APP_API_D, // api 的
  3. timeout: 300000 // request timeout
  4. });

结束!

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号