zoukankan      html  css  js  c++  java
  • Webpack-dev-server的proxy用法

    前言:

    devServer:{
            contentBase:'./',
            proxy:{
                // 当你请求是以/api开头的时候,则我帮你代理访问到http://localhost:3000
                // 例如:
                // /api/users  http://localhost:3000/api/users
                // 我们真是服务器接口是没有/api的 
                "/api":{
                    target:"http://localhost:3000",
                    pathRewrite:{"^/api":""}
                }
            }
        }
    

      用代理, 首先你得有一个标识, 告诉他你这个连接要用代理. 不然的话, 可能你的 html, css, js这些静态资源都跑去代理. 所以我们只要接口用代理, 静态文件用本地./api’: {}, 就是告诉node, 我接口只要是’/api’开头的才用代理.所以你的接口就要这么写 /api/xx/xx. 最后代理的路径就是 http://xxx.xx.com/api/xx/xx.可是不对啊, 我正确的接口路径里面没有/api啊. 所以就需要 pathRewrite,用”^/api”:”, 把’/api’去掉, 这样既能有正确标识, 又能在请求接口的时候去掉api.

    作用:

      1、解决开发环境的跨域问题(不用在去配置nginx和host)

      2、如果你有单独的后端开发服务器 API,并且希望在同域名下发送 API 请求 ,那么代理某些 URL 会很有用。    

    用法:

      1、请求到 /api/xxx 现在会被代理到请求 http://localhost:3000/api/xxx, 例如 /api/user 现在会被代理到请求 http://localhost:3000/api/user

    mmodule.exports = {
        //...
        devServer: {
            proxy: {
                '/api': 'http://localhost:3000'
            }
        }
    };
    

      2、如果你想要代码多个路径代理到同一个target下, 你可以使用由一个或多个「具有 context 属性的对象」构成的数组:

    module.exports = {
        //...
        devServer: {
            proxy: [{
                context: ['/auth', '/api'],
                target: 'http://localhost:3000',
            }]
        }
    };
    

      3、如果你不想始终传递 /api ,则需要重写路径:

    module.exports = {
        //...
        devServer: {
            proxy: {
                '/api': {
                    target: 'http://localhost:3000',
                    pathRewrite: {'^/api' : ''}
                }
            }
        }
    };
    

      请求到 /api/xxx 现在会被代理到请求 http://localhost:3000/xxx, 例如 /api/user 现在会被代理到请求 http://localhost:3000/user

      4、默认情况下,不接受运行在 HTTPS 上,且使用了无效证书的后端服务器。如果你想要接受,只要设置 secure: false 就行。修改配置如下:

    module.exports = {
        //...
        devServer: {
            proxy: {
                '/api': {
                    target: 'https://other-server.example.com',
                    secure: false
                }
            }
        }
    };
    

      5、有时你不想代理所有的请求。可以基于一个函数的返回值绕过代理。在函数中你可以访问请求体、响应体和代理选项。必须返回 false 或路径,来跳过代理请求。例如:对于浏览器请求,你想要提供一个 HTML 页面,但是对于 API 请求则保持代理。你可以这样做:

    module.exports = {
      //...
        devServer: {
            proxy: {
                '/api': {
                    target: 'http://localhost:3000',
                    bypass: function(req, res, proxyOptions) {
                        if (req.headers.accept.indexOf('html') !== -1) {
                            console.log('Skipping proxy for browser request.');
                            return '/index.html';
                        }
                    }
                }
            }
        }   
    };
    

    解决跨域原理

      上面的参数列表中有一个changeOrigin参数, 是一个布尔值, 设置为true, 本地就会虚拟一个服务器接收你的请求并代你发送该请求

    module.exports = {
        //...
        devServer: {
            proxy: {
                '/api': {
                    target: 'http://localhost:3000',
                    changeOrigin: true,
                }
            }
        }
    };
    

      

  • 相关阅读:
    hlgoj 1766 Cubing
    Reverse Linked List
    String to Integer
    Bitwise AND of Numbers Range
    Best Time to Buy and Sell Stock III
    First Missing Positive
    Permutation Sequence
    Next Permutation
    Gray Code
    Number of Islands
  • 原文地址:https://www.cnblogs.com/WebApp-DotNet/p/10571310.html
Copyright © 2011-2022 走看看