使用grunt到localhost的代理CORS请求

时间:2015-04-01 10:03:02

标签: javascript proxy gruntjs grunt-contrib-connect grunt-connect-proxy

我的应用(http://localhost:8099)正在向https://api.parse.com/做一些CORS请求,我想将其代理到我的本地API http://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/个请求(相同的域),但对于api.parse.com/的cors请求则完全被忽略。想法?

1 个答案:

答案 0 :(得分: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