【问题标题】:Proxy requests to a separate backend server with vue-cli使用 vue-cli 将请求代理到单独的后端服务器
【发布时间】:2017-03-11 23:00:08
【问题描述】:

我正在使用 vue-cli webpack-simple 模板来生成我的项目,并且我想将请求代理到单独的后端服务器。这怎么能轻松实现?

【问题讨论】:

  • 我并没有仔细查看vue-cli 的样板文件,而是使用了this generator for yeoman。即使我对 webpack/gulp/browser-sync 知之甚少,它也让我开始了(尽管当我尝试将它与后端集成时有一些陷阱)。我认为值得一看并在 vue-cli 和它之间进行选择。

标签: webpack vue.js webpack-dev-server


【解决方案1】:

如果您使用webpack 模板和vue-cli,那么您可以在此参考文档中找到所需的信息:

http://vuejs-templates.github.io/webpack/proxy.html

或者现在不更改模板,您可以将相关配置从webpack 模板复制到本地webpack-simple 模板中。

编辑:来自我的本地设置的更多信息

这是我在config/index.jsmodule.exports 下的内容:

dev: {
    env: require('./dev.env'),
    port: 4200,
    assetsSubDirectory: 'static',
    assetsPublicPath: '/',
    proxyTable: {
        '/api': {
            target: 'http://localhost:8080',
            changeOrigin: true
        },
        '/images': {
            target: 'http://localhost:8080',
            changeOrigin: true
        },
        // and so on...

上面的配置在端口 4200 上运行我的vue-cli,我在端口 8080 上运行我的服务器。

编辑:在评论 #4 和 #5 之后更正了有关 CORS 的信息

注意:

  • dev.proxyTable(在 webpack 配置中)中的 changeOrigin 选项可确保您无需在服务器 API 响应中提供 CORS 标头。
  • 如果您出于任何原因决定省略 changeOrigin,则需要确保您的服务器 API 在其响应标头中包含 Access-Control-Allow-Origin: *(或等效项)。

参考资料:

  1. https://stackoverflow.com/a/36662307/654825
  2. https://github.com/chimurai/http-proxy-middleware

【讨论】:

  • 那么使用 webpack-simple 模板比较难?
  • 我认为webpack-simple 旨在开始使用 Vue.js。 webpack 模板提供了更多配置,甚至还有一个detailed help-page 以获取更多信息。
  • 正如您所说的,如果您从简单的模板开始并编写大量代码,以后会变得更加困难,因为您需要自己完成所有额外的配置工作。
  • 我们这里可能不需要 CORS,我在后端添加了静态文件插件/库,以便它可以为 index.html 提供服务,并使前端开发服务器代理每个对后端服务器的请求。没有更多的 CORS,更干净了。
  • 感谢您的信息!我只是在本地做了一些快速实验,发现要么我们需要 CORS 头,要么在 webpack 开发的 proxyTable 选项中设置changeOrigin: true。服务器代理是使用 http-proxy-middleware 完成的 - 这个 github 页面确认 changeOrigin 选项将主机标头更改为服务器 URL(目标)。
【解决方案2】:

@vue/cli 3.x

  • 在项目的 文件夹中创建一个vue.config.js 文件(如果您还没有)。
  • 其内容如下:
// vue.config.js
module.exports = {
  devServer: {
    proxy: {
      "/gists": {
        target: "https://api.github.com",
        secure: false
      }
    }
  }
};

现在对http://localhost:8080/gists 的任何调用(假设您的开发服务器位于localhost:8080)都将重定向到https://api.github.com/gists


另一个例子:代理所有调用

假设您有一个通常部署在 localhost:5000 的本地后端服务器,并且您希望将所有对 /api/anything 的调用重定向到它。使用:

// vue.config.js
module.exports = {
    devServer: {
        proxy: {
            "/api/*": {
                target: "http://localhost:5000",
                secure: false
            }
        }
    }
};

【讨论】:

【解决方案3】:
module.exports = {

    devServer: {
        proxy: {
            '/api': {
                target: 'http://genius.net',
                changeOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            },
            '/auth': {
                target: 'http://genius23.net',
                changeOrigin: true,
                pathRewrite: {
                    '^/auth': ''
                }
            },
        }
    }

};

【讨论】:

  • 这是最好的答案,因为它提供了 pathRewrite。除非您将 /api 添加到所有开发服务器的 URI,否则您将需要它。
猜你喜欢
  • 2018-10-04
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
相关资源
最近更新 更多