zoukankan      html  css  js  c++  java
  • vue 开发和生产的跨域问题

    开发阶段

      在开发环境与后端调试的时候难免会遇到跨域问题,在 vue 项目中常用的是 proxyTable,这个用起来很方便。

      打开 config 文件夹下面的 index.js,找到 dev 开发模式的 proxyTable,添加以下代码即可:

            proxyTable: {
                '/api': {
                    target: 'http://xxx.xxx.xxx/', // 开发阶段,接口的域名
                    changeOrigin: true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题
              secure: true, // 如果是https接口,需要配置这个参数
                    pathRewrite: { // 路径重写,
                        '^/api': '/api' // 替换target中的请求地址,也就是说以后你在请求http://api.jisuapi.com/XXXXX这个地址的时候直接写成/api/XXXXX即可。
                    }
                }
            },

      在需要调用的接口前加上 "/api" 即可

    const menu = (params) => {
      return axios.get("/api/menu",params).then(res => res.data)
    };

      上述方法在开发阶段是没问题的,但是上线的时候,换成正式服务器,就不行了,因为路径中出现了 api 字符,并且生产和开发模式的域名可能不一致。

    生产阶段

      上线的时候,路径 "www.xxx.com:8080/api/menu" 中的 api ,如果真实接口中没有 api 这一层,路径就会报错。真实接口是 "www.xxx.com:8080/menu"

      解决方案:分别区分两种模式,然后拼接接口,具体如下。

    const rootUrl = process.env.NODE_ENV === 'development' ? '/api' : '';
    
    const menu = (params) => {
        return axios.get(rootUrl + '/menu', params).then(res => res.data)
    };

      上述方法可以实现开发和生产模式代码不用更改路径,但是没解决两种模式域名不一致的情况。

      还可以分别在 /config/dev.env.js 和 /config/prod.env.js 中分别设置 API_ROOT,然后取出再做接口的拼接。

    //config/dev.env.js文件中
    module.exports = merge(prodEnv, {
        NODE_ENV: '"development"',
        API_ROOT: '"/api"'
    })
    
    //config/prod.env.js文件中
    //生产阶段单独设置域名
    module.exports = {
        NODE_ENV: '"production"',
        API_ROOT: '"http://baidu.xxx.com/"'
    }
    
    //在接口调用的时候拼接
    const rootUrl = process.env.API_ROOT;
    
    const menu = (params) => {
        return axios.get(rootUrl + '/menu', params).then(res => res.data)
    };

      上述方法很好的解决了两种模式下路径中的 api 字符替换问题,并且域名也可以单独设置。

  • 相关阅读:
    使用rails Devise
    (转)两年服务器开发的一句话经验集
    新版本,新起点。
    学习《锋利的jQuery》1
    Watir 使用
    一些Web Front的收集
    PHP日期时间函数的高级应用技巧
    如何防止动态加载JavaScript引起的内存泄漏问题
    JavaScript常用函数库详解
    JavaScript加密解密
  • 原文地址:https://www.cnblogs.com/sspeng/p/9992430.html
Copyright © 2011-2022 走看看