美文网首页
Vuecli3配置代理及遇到的问题

Vuecli3配置代理及遇到的问题

作者: 黄金原野 | 来源:发表于2021-08-11 20:38 被阅读0次

    配置方法

    内容说明:

    此处前端应用的端口为8088,后端应用的端口为8052,域都为localhost
    后端接口为http://localhost:8052/Menu/xxxx

    配置修改

    vue.config.js文件中的proxy部分

    devServer: {
        open: true, //配置自动启动浏览器
        // host: '0.0.0.0',
        port: 8088,
        https: false,
        hot: false,
        hotOnly: false,
        // 设置代理
        proxy: {
            '^/Menu/': {
                target: 'http://localhost:8052',  // 代理到的后端接口地址
                ws: true,        //如果要代理 websockets,配置这个参数
                secure: false,  // 如果是https接口,需要配置这个参数
                changeOrigin: true,  //是否跨域
                // pathRewrite: {
                //     '/Menu': '/'
                // }
            }
        }, 
        before: app => {}
    },
    
    可能遇到的问题
    浏览器依然报错跨域问题,代理未能生效

    请求地址的配置文件在.env.development中,原来配置如下:

    NODE_ENV = 'development'
    VUE_APP_CURRENTMODE='dev'
    //local
    // 这是后端接口
    VUE_APP_API_HOST=http://localhost:8052/Menu
    

    其中VUE_APP_API_HOST为axios请求时,对应的baseURL地址

    // axios.js
    // create an axios instance
    const service = axios.create({
        baseURL: process.env.VUE_APP_API_HOST, // api 的 base_url
        timeout: 5000 // request timeout
    })
    

    此时启动VUE项目,依然报错跨域问题。因为此时请求的地址依然是http://localhost:8052开头,并未牵涉到配置的代理,需要将请求的地址修改为http://localhost:8088,即

    NODE_ENV = 'development'
    VUE_APP_CURRENTMODE='dev'
    //local
    // 这是后端接口
    VUE_APP_API_HOST=http://localhost:8088/Menu
    

    此时,代理会生效,但有可能会报错404

    pathRewrite可能会牵涉的路径问题

    这里针对的只是后端接口,浏览器中前端的请求与此无关,相关的接口都可以用postman访问测试。即,可以用postman测试http://localhost:8088/Menu/xxxx等一系列接口,因为vue已经设置了其代理。

    (注:此处前端接口指:vue项目运行起来时,浏览器控制台中XHR能看到的接口;
    后端接口指经过代理后的(后端)接口,它本身还是后端接口,只是经过了代理,可以用前端的ip和端口通过postman来调用。在某些情况下,前端接口和后端接口会存在路径上的偏差造成请求404)

    一般来说,pathRewrite的配置如下,作用是修改请求接口的地址(后端接口)

    pathRewrite: {
        '/Menu': '/'
    }
    
    // '^/api': '/api' // 这种接口配置出来 http://localhost:8088/api/login
    // '^/api': '/' 这种接口配置出来 http://localhost:8088/login
    

    然而这仅仅是理论上的配置,在实际使用中,我遇到了如下问题:

    如果在配置中保留'/Menu': '/',能够代理成功url会变成http://localhost:8088/Menu/Menu/xxx

    如果去除,能够代理成功的url为http://localhost:8088/Menu/xxxx

    甚至在写成'/Menu': '/Menu'时,能够成功代理的url也为http://localhost:8088/Menu/xxx

    与理论上的配置相反

    不确定是由于版本或者是其他什么问题导致的这一奇怪的现象,如果有人遇到此类的问题,可以考虑修改此处的配置。由于我只需要解决浏览器的跨域问题,只要保证前端调用的接口和后端能够成功代理的接口一致即可。

    相关文章

      网友评论

          本文标题:Vuecli3配置代理及遇到的问题

          本文链接:https://www.haomeiwen.com/subject/auchbltx.html