【问题标题】:Remove matched `/api` path in Webpack proxy在 Webpack 代理中删除匹配的 `/api` 路径
【发布时间】:2016-02-16 12:20:29
【问题描述】:

我有一个在http://localhost:9090/ 运行的后端服务。所有以/api/* 开头的呼叫都应该转发给它,前面没有/api。所以当我打电话给http://localhost:8080/api/my/route 它应该代理到http://localhost:9090/my/route

如果我使用以下选项:

proxy : [{
  path : '/api/*',
  target : 'http://localhost:9090'
}]

调用http://localhost:8080/api/my/route时,后端服务抱怨找不到路由/api/my/route

文档建议我可以使用 node-http-proxy 中的任何选项,但我无法确定要使用的正确选项。

我需要使用哪些选项来获得所需的结果?

【问题讨论】:

    标签: webpack webpack-dev-server node-http-proxy


    【解决方案1】:

    从 webpack-dev-server 版本 >= 1.15.0 开始,您可以使用记录在案的 pathRewrite

    proxy: {
      '/api': {
        target: 'https://other-server.example.com',
        pathRewrite: {'^/api' : ''}
      }
    }
    

    【讨论】:

      【解决方案2】:

      EDITED 对于版本 function (req,proxyoptions) { }

      像这样:

      proxy : [{
        path : '/api/*',
        target : 'http://localhost:9090',
        // bypass
        rewrite: function(req, options) {
          // manipulate req here 
          // in your case I think it's removing the /api part of url
        }
        // 
      }]
      

      【讨论】:

      • 非常感谢,它有效!这是否记录在 webpack-dev-server 文档中的某处?
      • 太棒了..我通过搜索文档中未找到的代码找到了这一点。警告 !在 github link 上查看了 webpack-dev-server 的主版本代码后,我认为下一个版本将不支持“重写”功能。我将使用绕过功能的示例编辑答案
      • 我已将rewrite 添加到docs。由于 bypass 已经将响应作为参数传递给注册的处理程序,我不确定 bypass 应该如何修改请求。
      • 你是对的......我已经意识到“绕过”将无济于事。我认为“绕过”只有在您想完全绕过特定模式的代理功能时才有用......
      • 看起来 rewrite 选项已被 pathRewrite 选项取代 - 至少它被踢出文档以支持它。我接受@Aprillion 的回答,以帮助为未来的问题解决者找到最佳答案
      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 2018-10-12
      • 2021-02-08
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多