应用引擎上的App.yaml未正确转发通配符

时间:2014-07-03 21:25:48

标签: python html5 angularjs google-app-engine

我最近尝试使用

启用角度html5mode浏览
// use the HTML5 History API
$locationProvider.html5Mode(true);

突然间,当我尝试去我的一条客户端路线时,app引擎似乎甚至没有将我的请求转发给我的webapp2处理程序。

例如,localhost:8080 /#/ myRoute在直接输入时正确路由但localhost:8080 / myRoute给了我404.

我认识到#表示客户端路由,但只要我的请求被转发到我的index.html angular就应该处理请求。我没有为/#/明确创建路由,所以它似乎将它们作为通配符处理而不是其他路由。

我在app.yaml中尝试了这些路线:

- url: /
  script: server.web_server.main.app

- url: .*
  script: server.web_server.main.app

- url: /.*
  script: server.web_server.main.app

我的server.web_server.main.app路由设置如下:

app = webapp2.WSGIApplication([
    # Main SPA handler
    webapp2.Route('/', MainHandler, name='main'),
], debug=True)

当我不使用#时,MainHandler甚至都没有看到请求,服务器日志确实表明他们确实有404.我能理解,如果#和没有任何内容导致404,那么我的通配符将无法正常工作,但是如果我没有为/#/设置任何特殊路由,为什么/#/工作和/不能工作?

有人可以解释我做错了吗?

提前致谢! - Jp。

2 个答案:

答案 0 :(得分:1)

MainHandler没有看到/myRoute的请求,因为只有/被路由(在应用内)到该处理程序,即使您的app.yaml是将请求路由到应用程序。

尝试添加类似

的内容
webapp2.Route('/myRoute', MainHandler, name='myroutemain'),

WSGIApplication

答案 1 :(得分:0)

所以上面的帖子是完全正确的,但我想我会添加一个更简单的解决方案,它不需要你手动指定每个客户端路由。

您可以通过执行以下操作添加通配符正则表达式:

class MainHandler(BaseHandler):
    def get(self, opt=None):
        self.render("index.html", {"title": "My Angular App"})

app = webapp2.WSGIApplication([
    # Main SPA handler
    webapp2.Route(r'/<:.*>', MainHandler, name='main')
], debug=True)

当我最初尝试时,我没有正确的正则表达式的语法。如果需要,捕获的值将传递给您可以使用。