Webpack主机将请求重定向到谷歌应用引擎后端

时间:2017-03-04 17:53:51

标签: angular google-app-engine proxy angular-cli google-app-engine-python

我正在尝试使用Angular2 CLI来帮助支架并创建我的角度2项目。这包括一个很好的测试套件,webpack等设置。

我还在Google App Engine上用Python开发了一个API。不幸的是,如果我只使用GAE来托管我的前端,我会失去webpack的一些优点(自动检测,重新加载,单元测试)。

我尝试使用代理配置将请求重定向到我的后端。

{
  "/api" :{
    "target": "http://localhost:8080",
    "secure": false,
    "loglevel": "debug"
  },
  "/_ah" :{
    "target": "http://localhost:8080",
    "secure": false,
    "loglevel": "debug"
  }
}

我使用ng serve --proxy-config proxy.config.json引用代理配置。 这适用于我直接使用webapp2定义的请求。这些请求在/ api级别举行。

但是对于我在/ _ah后面定义的请求失败了,我使用端点库来定义。

ModuleDoesNotExistError('localhost:4200',)
Traceback (most recent call last):
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 1302, in communicate
    req.respond()
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 831, in respond
    self.server.gateway(self).respond()
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/lib/cherrypy/cherrypy/wsgiserver/wsgiserver2.py", line 2117, in respond
    for chunk in response:
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/endpoints/endpoints_server.py", line 121, in __call__
yield self.dispatch(request, start_response)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/endpoints/endpoints_server.py", line 151, in dispatch
return self.call_spi(request, start_response)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/endpoints/endpoints_server.py", line 324, in call_spi
spi_request.source_ip)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 639, in add_request
headers_dict['Host'], urlparse.urlsplit(relative_url).path)
  File "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py", line 713, in _resolve_target
raise request_info.ModuleDoesNotExistError(hostname)
ModuleDoesNotExistError: localhost:4200

我希望我可以使用GAE设置配置,以允许来自端口4200的请求。或者其他一些方式,我可以保留angular cli / webpack组合的值,同时使用GAE托管本地api

更新

我做了一些非常重要的工作,但我仍觉得我错过了一个配置文件。

我让它工作的黑客是更新app服务器py文件: "/usr/lib/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/dispatcher.py"

我将第685行更改为此硬编码选项if not hostname or hostname == default_address or hostname == 'localhost:4200':

现在,不再抛出错误,但是修复得很糟糕。任何帮助将不胜感激,所以我可以支持,并正确使用该工具。

1 个答案:

答案 0 :(得分:4)

尝试在proxy.config中将changeOrigin设置为true。如:

"/_ah" : {
    "target": "http://localhost:8080",
    "secure": false,
    "loglevel": "debug",
    "changeOrigin": true
}