2

我的应用 ( http://localhost:8099) 正在执行一些 CORS 请求https://api.parse.com/,我想代理到我的本地 apihttp://localhost:8077以进行测试。这可以实现grunt-connect-proxy吗?

这是我的 grunt-connect-proxy 配置,它不像我预期的那样工作。

connect: {
      dev: {
        options: {
          port: 8099,
          hostname: 'localhost',
          base: 'build/',
          livereload: false,
          keepalive: true,
          middleware: function (connect, options) {
            var proxy = require('grunt-connect-proxy/lib/utils').proxyRequest;
            return [
              // Include the proxy first
              proxy,
              // Serve static files.
              connect.static('build/')
            ];
          }
        }
      },
      proxies: [
      {
        context: ['api/'], //same domain api requests, proxy works fine!
        host: 'localhost',
        port: 8077
      },
      {
        context: ['api.parse.com/'], //cors, proxy is not working
        host: 'localhost',
        port: 8077,
        changeOrigin: true
      }]

    }

→ grunt serve
Proxy created for: api/ to localhost:8077
Proxy created for: api.parse.com/ to localhost:8077

因此,基本上代理适用于api/请求(同一域),但对于 cors 对api.parse.com/. 想法?

4

1 回答 1

1

当您向 发出请求时api.parse.com,浏览器将连接到实际的 parse.com 服务器。grunt-connect-proxy 仅在向应用程序服务器发出请求时出现,在您的情况下为 localhost:8099。

其他所有 localhost:8099 都是您的应用程序的远程/跨域(甚至是 localhost:8077),您可以使用 grunt-connect-proxy 在服务器端连接到这些服务器,而在客户端您仍然会向您的自己的服务器。

使用上下文配置代理时要连接到哪个服务器。

proxies: [
      {
        context: ['api/'],
        host: 'localhost',
        port: 8077
      },
      {
        context: ['parse/'], 
        host: 'api.parse.com'
      }]

因此,考虑到上述配置

localhost:8099/api--> 将得到localhost:8077

localhost:8099/parse--> 会去api.parse.com

于 2015-04-02T08:55:10.123 回答