我最近尝试使用
启用角度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。
答案 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)
当我最初尝试时,我没有正确的正则表达式的语法。如果需要,捕获的值将传递给您可以使用。