前端代码多IP部署(部署多台服务器,动态配置前端请求的IP地址)

部署多台服务器,动态配置前端请求的IP地址

【入口文件】

index.ts

import prod from './prod';
import dev from './dev';

const nodeEnv = process.env.NODE_ENV;

let config;
if (nodeEnv === 'production') {
  config = prod;
} else {
  config = dev;
}

export default config;

【开发环境development】

dev.ts

export default {
  apiBase: 'http://xxx.xxx.xx.xx/api/',

  wsBase: 'ws://xxx.xxx.xx.xx:xxxx',
};

【生产环境production】

prod.ts

export default {
  apiBase: '',
};

在这里插入图片描述

【调用】

可写在请求拦截器处,request.ts
当发送请求时先判断如果是development环境,就直接调用本地dev.ts中的apiBase,否则自动拼接线上ip+/api/
在这里插入图片描述
另一种,如果不仅有http请求,还有websocket请求,且也为动态ip地址,同理可采用当development环境时就直接调用本地dev下的wsBase,否则上线时用主机ip拼接:8080 (我这里只是举例,具体拼接什么看后台同学给的地址)
在这里插入图片描述

【最后附上request.ts】
【含有请求拦截器写法哦】

import { extend } from 'umi-request';
import { message } from 'antd';
import config from '../config/dev';
import { history } from 'umi';
import { isFormData } from '@/utils';

const API_URL = config.apiBase;
const codeMessage = {
  200: '服务器成功返回请求的数据',
  201: '新建或修改数据成功',
  202: '一个请求已经进入后台排队(异步任务)',
  204: '删除数据成功',
  400: '请求有误,服务器没有进行新建或修改数据的操作',
  401: '用户名或密码错误',
  403: '用户得到授权,但是访问是被禁止的',
  404: '请求失败,结果不存在',
  405: '操作失败',
  406: '请求的格式不可得',
  410: '请求的资源被永久删除',
  422: '当创建对象时,发生验证错误',
  500: '服务器发生错误,请检查服务器',
  502: '网关错误',
  503: '服务不可用,服务器暂时过载或维护',
  504: '网关超时',
};

type mapCode =
  | 200
  | 201
  | 202
  | 204
  | 400
  | 401
  | 403
  | 404
  | 405
  | 406
  | 410
  | 422
  | 500
  | 502
  | 503
  | 504;

/**
 * 异常处理程序
 */
const errorHandler = (error: { response: Response }): Response => {
  const { response } = error;
  console.log(response);
  if (response && response.status) {
    const errorText =
      codeMessage[response.status as mapCode] || response.statusText;
    const { status, url } = response;
    message.error(`${errorText}`);
  } else if (!response) {
    message.error('无法连接服务器');
  }
  return response;
};

/**
 * 配置request 请求时的默认参数
 */
//  console.log(process.env.UMI_ENV,process.env.API_ROOT);

const request = extend({
  timeout: 20000,
  prefix: process.env.NODE_ENV === 'development' ? API_URL : '/api/',
  errorHandler, // 默认错误处理
  // credentials: 'include', // 默认请求是否带上cookie
});

// token 拦截器
request.interceptors.request.use((url: string, options: any) => {
  let newOptions: any = { ...options };
  const token = localStorage.getItem('token');
  if (token) {
    newOptions.headers['Authorization'] = token ? `Bearer ${token}` : null;
  }
  newOptions.headers['Content-Type'] = 'application/json';

  if (isFormData(newOptions.body)) {
    delete newOptions.headers['Content-Type'];
  }
  return {
    url,
    options: newOptions,
  };
});
request.interceptors.response.use((response) => {
  // const token = response.headers.get('access-token');
  // if (token) {
  //     localStorage.setItem('access-token', token);
  // }
  // return response;

  try {
    const token = localStorage.getItem('token');
    if (response.status === 401 && history.location.pathname === '/login') {
      message.error('用户名或密码错误');
      return;
    }

    if (
      response.status === 401 ||
      response.status === 403 ||
      (!token && history.location.pathname !== '/login')
    ) {
      // message.error('登录已过期,请重新登录');
      localStorage.removeItem('token');
      localStorage.removeItem('auth');
      history.push('/login');
      return;
    }
  } catch (error) {
    return Promise.reject(error);
  }
  // console.log(response, 'response')
  return response;
});
export default request;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抱歉,我可以回答这个问题。Vue可以通过修改webpack配置文件中的devServer项来动态配置IP地址,同时需要在后端服务器配置允许跨域请求。具体的步骤可以参考Vue官方文档或者其他开源社区的教程。 ### 回答2: Vue项目多地IP地址部署是指将项目部署到不同的地方,每个地方都有不同的IP地址。 实现多地IP地址部署主要需要以下几个步骤: 1. 确定各个地方的IP地址:根据实际情况,找到每个地方的IP地址,可以是局域网的内网IP地址,也可以是公网的外网IP地址。 2. 配置Vue项目的部署文件:在Vue项目的部署文件中,将各地的IP地址按照不同的环境进行配置。可以使用环境变量来实现动态配置,比如在配置文件中定义一个变量,根据不同的环境去读取相应的IP地址。 3. 后台配置动态IP:后台配置动态IP主要是指在服务器端根据不同的请求动态返回相应的IP地址。可以通过在后台数据库中存储各地的IP地址信息,根据请求的参数或者请求的地理位置信息,动态返回相应的IP地址。 通过以上步骤,就可以实现Vue项目的多地IP地址部署和后台配置动态IP的需求。这样可以根据不同的地方灵活部署项目,并且通过后台配置动态IP可以根据不同的请求返回相应的IP地址,提供更好的用户体验。 ### 回答3: Vue.js是一种前端开发框架,可以轻松实现跨平台和多地部署。对于Vue项目的多地IP地址部署,我们需要相应的后台配置来实现动态IP。 首先,我们需要在后台配置文件中添加一个IP地址配置项。配置项可以是一个数组,包含了所有需要部署IP地址。例如,配置项可以是如下的形式: ``` ipList: ["192.168.1.100", "192.168.1.101", "192.168.1.102"] ``` 然后,在Vue项目中,我们需要获取后台动态配置IP地址,并根据这些IP地址请求后端接口。这可以通过在Vue的API请求封装中实现。例如,我们可以创建一个`api.js`文件,用来封装所有的API请求。 首先,在`api.js`中引入Vue和Axios: ``` import Vue from 'vue' import axios from 'axios' ``` 然后,我们在`api.js`中定义一个`getBaseUrl`函数,用来获取后台配置动态IP地址: ``` function getBaseUrl() { // 这里可以根据需求获取后台配置动态IP地址 // 返回可用的IP地址 } ``` 接下来,在`api.js`中定义所有的API请求,例如: ``` export function getUserInfo() { const baseUrl = getBaseUrl() return axios.get(baseUrl + '/api/user/info') } ``` 在这个例子中,我们使用`getBaseUrl`函数获取后台配置动态IP地址,并拼接上对应的API路径来进行请求。 最后,在Vue组件中使用这些API请求即可: ``` import { getUserInfo } from '@/api' export default { mounted() { getUserInfo().then(res => { // 处理请求返回的数据 }) } } ``` 通过以上步骤,我们可以实现Vue项目的多地IP地址部署,并且后台配置动态IP。这样,不同的部署地点可以根据需求动态配置IP地址,实现灵活的部署和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值